簡體   English   中英

Seaborn:不同的函數返回不同的對象類型,例如 FacetGrid 和 AxesSubplot。 為什么和有什么區別?

[英]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對象。 這讓我產生了疑問:

  1. 為什么 Seaborn 為不同的圖返回不同的對象? (或者它是否只返回一種類型,而我錯誤地操作數據?)
  2. 這些對象類型有什么區別?

這真的很令人困惑。 例如,我使用g.legend(loc='center')以修改由創建的AxesSubplot的圖例sns.countplot() 它運作良好。 然而,當我嘗試用FacetGrid做到這一點通過創建sns.lmplot()我得到的錯誤“傳奇”對象不是可調用的 我目前正在嘗試解決它,但這個錯誤不是這個問題的重點:在這里,我只想了解 Seaborn 對象類型。

如果這是初學者的問題,我很抱歉。 我用谷歌搜索,但我找不到任何我能理解的東西。 另外,如果我沒有使用正確的術語,我深表歉意。 關於 Python 繪圖,我是自學的,所以有很多我不太理解的東西。

免責聲明

不久前我發布了這個問題,現在回過頭來看,我知道我知道的太少了! 在我的 BSc 和 MSc 期間,我只有非常基礎的編程課程,沒有 OOP,這就是為什么我對 Seaborn 和 Matplotlib 產生這種懷疑。 現在,我已經學習了,我可以回答我的問題了。 然而,下面寫的東西可能是錯誤的,因為我仍然是一個初學者。 如果我錯了,請糾正並幫助我改進我的答案。

面向對象編程的快速而笨拙的筆記

我缺少的部分是面向對象編程 (OOP) 以下是理解其余答案所需的一些概念。 但整個故事比這四個要點要長得多。

  • 對象: Python 的基本構建塊。 程序中的所有數據都由對象或對象之間的關系表示。 例如,所有這些都是單獨的對象:單個字符串、單個整數、一個列表。 對象具有屬性(變量或方法),由它們的類型/類決定。
  • 類:它是用戶定義的對象類型(除了內置類型,如字符串或整數)。 類告訴對象(該類型)必須具有哪些屬性。
  • 方法:方法就像可以修改和操作給定類的對象的函數。
  • 實例:給定類型的對象是該類的實例。

Matplotlib.pyplot 對象

讓我們從 Matplotlib 開始,因為 Seaborn 基於它。 當您使用pyplot ,您將創建Figure類的一個實例和Axes類的一個或多個實例。

圖是所有繪圖元素的容器,它是最終圖像。 每個軸都是一個單獨的圖(例如,大圖像中的單個條形圖)。

作為類,有幾種方法可以操作它們的實例。 例如,對於 Figure 類,您可以使用fig.savefig()來保存圖像。 關於軸,使用ax.set_xlabel()在繪圖的 x 軸上放置一個標簽。

Seaborn 對象

向 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM