[英]Seaborn: different functions return different object types, such as FacetGrid and AxesSubplot. Why and what is the difference?
我正在使用 Python Seaborn 生成圖表。 我注意到一些函數,例如sns.lmplot()
返回FacetGrid對象。 另一方面,函數sns.countplot()
返回Matplotlib 的 AxesSubplot對象。 這讓我產生了疑問:
這真的很令人困惑。 例如,我使用g.legend(loc='center')
以修改由創建的AxesSubplot的圖例sns.countplot()
。 它運作良好。 然而,當我嘗試用FacetGrid做到這一點通過創建sns.lmplot()
我得到的錯誤“傳奇”對象不是可調用的。 我目前正在嘗試解決它,但這個錯誤不是這個問題的重點:在這里,我只想了解 Seaborn 對象類型。
如果這是初學者的問題,我很抱歉。 我用谷歌搜索,但我找不到任何我能理解的東西。 另外,如果我沒有使用正確的術語,我深表歉意。 關於 Python 繪圖,我是自學的,所以有很多我不太理解的東西。
不久前我發布了這個問題,現在回過頭來看,我知道我知道的太少了! 在我的 BSc 和 MSc 期間,我只有非常基礎的編程課程,沒有 OOP,這就是為什么我對 Seaborn 和 Matplotlib 產生這種懷疑。 現在,我已經學習了,我可以回答我的問題了。 然而,下面寫的東西可能是錯誤的,因為我仍然是一個初學者。 如果我錯了,請糾正並幫助我改進我的答案。
我缺少的部分是面向對象編程 (OOP) 。 以下是理解其余答案所需的一些概念。 但整個故事比這四個要點要長得多。
讓我們從 Matplotlib 開始,因為 Seaborn 基於它。 當您使用pyplot
,您將創建Figure類的一個實例和Axes類的一個或多個實例。
圖是所有繪圖元素的容器,它是最終圖像。 每個軸都是一個單獨的圖(例如,大圖像中的單個條形圖)。
作為類,有幾種方法可以操作它們的實例。 例如,對於 Figure 類,您可以使用fig.savefig()
來保存圖像。 關於軸,使用ax.set_xlabel()
在繪圖的 x 軸上放置一個標簽。
向 mwaskom 大喊大叫,他在上面的評論中提到了這個頁面。
Seaborn 有兩種類型的功能:軸級和圖形級。 軸級函數返回matplotlib.pyplot Axes objects 。 Figure 級函數返回一個Seaborn FacetGrid 對象(它不直接返回一個 matplotlib Figure 對象)。 就像我在問題中提到的過去的自己一樣, sns.lmplot()
返回一個 FacetGrid,而sns.countplot()
返回一個 Axes。
通常有軸級和圖形級功能的等價物。 例如, sns.histplot()
和sns.displot()
返回相似的直方圖,但前者是 Axes,后者是 FacetGrid。
Axes 和 FacetGrids 具有不同的特性和方法。 一個實例需要適合它們的類的方法並操作它們的屬性。 在問題示例中, ax.legend()
與countplot()
的 Axes 一起使用,因為它適用於該類。 它不適用於sns.lmplot()
的 FacetGrid,因為它不適合它。 為了操作 FacetGrid,您需要不同的方法,這些方法在 Matplotlib 中不存在。
同樣,值得查看此頁面以獲取更多信息: http : //seaborn.pydata.org/tutorial/function_overview.html
值得一提的是另外兩個 Seaborn 類:JointGrid 和 PairGrid。 他們也會有自己的屬性。
為什么有這么多課? 它們中的每一個都有在特定情況下有用的功能。 推薦圖級功能,圖片定制更容易。 當您要將 Seaborn 繪圖放入更大更復雜的 Matplotlib 圖形中時,軸級圖像會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.