seaborn.FacetGrid#

class seaborn.FacetGrid(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)#

用於繪製條件關係的多圖網格。

__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

但是,當在 FacetGrid 上設定 hue 時,會為變數的每個層級繪製單獨的圖形。如果繪圖函數了解 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

方法

__init__(data, *[, row, col, hue, col_wrap, ...])

初始化 matplotlib 圖形和 FacetGrid 物件。

add_legend([legend_data, title, ...])

繪製圖例,可能會將其放置在軸外部並調整圖形大小。

apply(func, *args, **kwargs)

將網格傳遞給使用者提供的函數並傳回 self。

despine(**kwargs)

從分面中移除軸脊。

facet_axis(row_i, col_j[, modify_state])

使由這些索引所識別的軸處於活動狀態並返回它。

facet_data()

產生器,用於每個分面的名稱索引和資料子集。

map(func, *args, **kwargs)

將繪圖函數應用於每個分面的資料子集。

map_dataframe(func, *args, **kwargs)

類似於 .map,但將 args 作為字串傳遞並將資料插入 kwargs 中。

pipe(func, *args, **kwargs)

將網格傳遞給使用者提供的函數並返回其值。

refline(*[, x, y, color, linestyle])

為每個分面添加參考線。

savefig(*args, **kwargs)

儲存繪圖的影像。

set(**kwargs)

設定每個子圖軸的屬性。

set_axis_labels([x_var, y_var, clear_inner])

在網格的左欄和底列設定軸標籤。

set_titles([template, row_template, ...])

在每個分面上方或網格邊距上繪製標題。

set_xlabels([label, clear_inner])

在網格的底列標示 x 軸。

set_xticklabels([labels, step])

設定網格的 x 軸刻度標籤。

set_ylabels([label, clear_inner])

在網格的左欄標示 y 軸。

set_yticklabels([labels])

在網格的左欄設定 y 軸刻度標籤。

tick_params([axis])

修改刻度、刻度標籤和網格線。

tight_layout(*args, **kwargs)

在排除圖例的矩形內呼叫 fig.tight_layout。

屬性

ax

當沒有指定分面變數時的 matplotlib.axes.Axes

axes

網格中 matplotlib.axes.Axes 物件的陣列。

axes_dict

分面名稱與對應的 matplotlib.axes.Axes 的映射。

fig

已過時:請改用 figure 屬性。

figure

存取網格底層的 matplotlib.figure.Figure 物件。

legend

如果存在,則為 matplotlib.legend.Legend 物件。