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
,則忽略。
另請參閱
範例
呼叫建構子需要一個長格式資料物件。這會初始化網格,但不會在其上繪製任何內容
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()
但是,當在
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()
圖形的大小和形狀會在每個子圖的層級使用
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))
方法
__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])使由這些索引所識別的軸處於活動狀態並返回它。
產生器,用於每個分面的名稱索引和資料子集。
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
物件。