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,則忽略此參數。

另請參閱

PairGrid

用於繪製成對關係的子圖網格

relplot

合併關係圖和 FacetGrid

displot

合併分佈圖和 FacetGrid

catplot

合併類別圖和 FacetGrid

lmplot

合併回歸圖和 FacetGrid

範例

注意

這些範例使用 seaborn 函式來示範此類別的一些進階功能,但在大多數情況下,您會希望使用圖層級函式(例如 displot()relplot())來製作此處顯示的圖表。

呼叫建構函式需要長格式資料物件。這會初始化網格,但不會在其上繪製任何內容

tips = sns.load_dataset("tips")
sns.FacetGrid(tips)
../_images/FacetGrid_1_0.png

指定欄和/或列變數以將更多子圖新增至圖形

sns.FacetGrid(tips, col="time", row="sex")
../_images/FacetGrid_3_0.png

若要在每個分面上繪製圖表,請將函式和資料框架中一或多個欄的名稱傳遞給 FacetGrid.map()

g = sns.FacetGrid(tips, col="time",  row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
../_images/FacetGrid_5_0.png

FacetGrid.map() 中的變數規格需要位置引數映射,但如果函式具有 data 參數並接受具名變數指定,您也可以使用 FacetGrid.map_dataframe()

g = sns.FacetGrid(tips, col="time",  row="sex")
g.map_dataframe(sns.histplot, x="total_bill")
../_images/FacetGrid_7_0.png

請注意每個分面中的直方圖組寬度如何不同。每個分面上都會繪製單獨的圖表,因此如果繪圖函式從資料中衍生任何參數,則它們可能不會在各個分面之間共用。您可以傳遞其他關鍵字引數來同步它們。但是,如果可能的話,使用像 displot() 這樣的圖層級函式會為您處理這種記帳工作

g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.histplot, x="total_bill", binwidth=2, binrange=(0, 60))
../_images/FacetGrid_9_0.png

FacetGrid 建構函式接受 hue 參數。設定此參數會根據另一個變數來調整資料,並以不同顏色繪製多個圖表。在可能的情況下,會追蹤標籤資訊,以便可以繪製單一圖例

g = sns.FacetGrid(tips, col="time", hue="sex")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.add_legend()
../_images/FacetGrid_11_0.png

但是,當 hueFacetGrid 上設定時,會為變數的每個層級繪製單獨的圖表。如果繪圖函式理解 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()
../_images/FacetGrid_13_0.png

圖表的大小和形狀是使用 heightaspect 參數在每個子圖的層級指定的

g = sns.FacetGrid(tips, col="day", height=3.5, aspect=.65)
g.map(sns.histplot, "total_bill")
../_images/FacetGrid_15_0.png

如果分配給 col 的變數具有許多層級,則可以「包裝」它,使其跨越多列

g = sns.FacetGrid(tips, col="size", height=2.5, col_wrap=3)
g.map(sns.histplot, "total_bill")
../_images/FacetGrid_17_0.png

若要在每個分面上新增水平或垂直參考線,請使用 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())
../_images/FacetGrid_19_0.png

您可以傳遞自訂函式來繪製圖表,或註釋每個分面。您的自訂函式必須使用 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)
../_images/FacetGrid_21_0.png

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")
../_images/FacetGrid_23_0.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))
../_images/FacetGrid_25_0.png