seaborn.FacetGrid.__init__#
- FacetGrid.__init__(data, *, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=False, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None)#
初始化 matplotlib 圖表和 FacetGrid 物件。
此類別將資料集對應到多個軸,這些軸排列成對應於資料集中變數層級的行和列網格。它產生的圖表通常稱為「格子圖」、「網格圖」或「小複圖」圖形。
它也可以使用
hue
參數來表示第三個變數的層級,該參數會以不同的顏色繪製不同的資料子集。這使用顏色來解析第三個維度上的元素,但僅在彼此之上繪製子集,並且不會像接受hue
的軸層級函數那樣為特定視覺化客製化hue
參數。基本工作流程是使用資料集和用於建構網格的變數來初始化
FacetGrid
物件。然後,可以透過呼叫FacetGrid.map()
或FacetGrid.map_dataframe()
將一個或多個繪圖函數應用於每個子集。最後,可以使用其他方法調整繪圖,例如變更軸標籤、使用不同的刻度或新增圖例。如需更多資訊,請參閱下面的詳細程式碼範例。警告
當使用從資料集推斷語意對應的 seaborn 函數時,必須小心地在各個方面同步這些對應(例如,透過使用調色盤字典定義
hue
對應或將變數的資料類型設定為category
)。在大多數情況下,最好使用圖表層級函數(例如relplot()
或catplot()
)而不是直接使用FacetGrid
。如需更多資訊,請參閱教學。
- 參數:
- dataDataFrame
整齊(「長格式」)資料框架,其中每欄都是變數,每列都是觀察值。
- row, col, hue字串
定義資料子集的變數,這些子集將繪製在網格中的不同面上。請參閱
{var}_order
參數以控制此變數層級的順序。- col_wrap整數
在此寬度「包裝」欄變數,以便欄面跨越多列。與
row
面不相容。- share{x,y}布林值、「col」或「row」,選擇性
如果為 true,則各面將在各欄之間共用 y 軸,和/或在各列之間共用 x 軸。
- height純量
每個面的高度(以英寸為單位)。另請參閱:
aspect
。- aspect純量
每個面的長寬比,以便
aspect * height
提供每個面的寬度(以英寸為單位)。- palette調色盤名稱、清單或字典
用於
hue
變數不同層級的顏色。應該是能被color_palette()
解釋的內容,或是將色調層級映射到 matplotlib 顏色的字典。- {row,col,hue}_order列表
分面變數層級的順序。預設情況下,這會是層級在
data
中出現的順序,或者如果變數是 pandas 分類變數,則會是類別順序。- hue_kws參數 -> 值列表映射的字典
其他關鍵字參數,用於插入繪圖呼叫中,讓其他繪圖屬性在色調變數的不同層級之間變化(例如散佈圖中的標記)。
- legend_out布林值
如果為
True
,則會擴展圖形大小,並且圖例會繪製在圖表的中心右側之外。- despine布林值
從圖表中移除頂部和右側的脊線。
- margin_titles布林值
如果為
True
,則列變數的標題會繪製在最後一欄的右側。此選項為實驗性質,可能無法在所有情況下運作。- {x, y}lim: 元組
每個分面上的每個軸的限制(僅在 share{x, y} 為 True 時相關)。
- subplot_kws字典
傳遞給 matplotlib subplot(s) 方法的關鍵字參數字典。
- gridspec_kws字典
傳遞給
matplotlib.gridspec.GridSpec
的關鍵字參數字典(透過matplotlib.figure.Figure.subplots()
)。如果col_wrap
不是None
,則忽略此參數。
另請參閱
範例
呼叫建構函式需要長格式資料物件。這會初始化網格,但不會在其上繪製任何內容
tips = sns.load_dataset("tips") sns.FacetGrid(tips)
指定欄和/或列變數以將更多子圖新增至圖形
sns.FacetGrid(tips, col="time", row="sex")
若要在每個分面上繪製圖表,請將函式和資料框架中一或多個欄的名稱傳遞給
FacetGrid.map()
g = sns.FacetGrid(tips, col="time", row="sex") g.map(sns.scatterplot, "total_bill", "tip")
FacetGrid.map()
中的變數規格需要位置引數映射,但如果函式具有data
參數並接受具名變數指定,您也可以使用FacetGrid.map_dataframe()
g = sns.FacetGrid(tips, col="time", row="sex") g.map_dataframe(sns.histplot, x="total_bill")
請注意每個分面中的直方圖組寬度如何不同。每個分面上都會繪製單獨的圖表,因此如果繪圖函式從資料中衍生任何參數,則它們可能不會在各個分面之間共用。您可以傳遞其他關鍵字引數來同步它們。但是,如果可能的話,使用像
displot()
這樣的圖層級函式會為您處理這種記帳工作g = sns.FacetGrid(tips, col="time", row="sex") g.map_dataframe(sns.histplot, x="total_bill", binwidth=2, binrange=(0, 60))
FacetGrid
建構函式接受hue
參數。設定此參數會根據另一個變數來調整資料,並以不同顏色繪製多個圖表。在可能的情況下,會追蹤標籤資訊,以便可以繪製單一圖例g = sns.FacetGrid(tips, col="time", hue="sex") g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.add_legend()
但是,當
hue
在FacetGrid
上設定時,會為變數的每個層級繪製單獨的圖表。如果繪圖函式理解hue
,最好讓它處理該邏輯。但務必確保每個分面都會使用相同的色調映射。在範例tips
資料中,sex
欄具有類別資料類型,這可確保此點。否則,您可能需要使用hue_order
或類似參數g = sns.FacetGrid(tips, col="time") g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="sex") g.add_legend()
圖表的大小和形狀是使用
height
和aspect
參數在每個子圖的層級指定的g = sns.FacetGrid(tips, col="day", height=3.5, aspect=.65) g.map(sns.histplot, "total_bill")
如果分配給
col
的變數具有許多層級,則可以「包裝」它,使其跨越多列g = sns.FacetGrid(tips, col="size", height=2.5, col_wrap=3) g.map(sns.histplot, "total_bill")
若要在每個分面上新增水平或垂直參考線,請使用
FacetGrid.refline()
g = sns.FacetGrid(tips, col="time", margin_titles=True) g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.refline(y=tips["tip"].median())
您可以傳遞自訂函式來繪製圖表,或註釋每個分面。您的自訂函式必須使用 matplotlib 狀態機介面在「目前」軸上繪製圖表,並且應捕獲其他關鍵字引數
import matplotlib.pyplot as plt def annotate(data, **kws): n = len(data) ax = plt.gca() ax.text(.1, .6, f"N = {n}", transform=ax.transAxes) g = sns.FacetGrid(tips, col="time") g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.map_dataframe(annotate)
FacetGrid
物件有一些其他有用的參數和方法可用於調整圖表g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True) g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.set_axis_labels("Total bill ($)", "Tip ($)") g.set_titles(col_template="{col_name} patrons", row_template="{row_name}") g.set(xlim=(0, 60), ylim=(0, 12), xticks=[10, 30, 50], yticks=[2, 6, 10]) g.tight_layout() g.savefig("facet_plot.png")
您也可以存取基礎 matplotlib 物件以進行其他調整
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True, despine=False) g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.figure.subplots_adjust(wspace=0, hspace=0) for (row_val, col_val), ax in g.axes_dict.items(): if row_val == "Lunch" and col_val == "Female": ax.set_facecolor(".95") else: ax.set_facecolor((0, 0, 0, 0))