首頁  >  文章  >  後端開發  >  如何在定義的 Matplotlib 子圖中繪製 Seaborn 圖?

如何在定義的 Matplotlib 子圖中繪製 Seaborn 圖?

Patricia Arquette
Patricia Arquette原創
2024-11-01 18:02:02311瀏覽

How to Plot Seaborn Plots Within Defined Matplotlib Subplots?

seaborn 不在定義的子圖中繪圖

許多seaborn 繪圖可以使用matplotlib.pyplot.subplots 函數在子圖中繪製,與常規matplotlib 繪圖的方式相同可以繪製。 然而,有些函數有一些限制,例如沒有 ax 參數

seaborn.distplot 的棄用

在版本 0.11 之前,seaborn.distplot 函數被用來繪製許多不同類型的圖分佈。 Seaborn 0.11 已棄用此函數

seaborn.distplot() has been DEPRECATED in seaborn 0.11 and is replaced with the following:

displot(), a figure-level function with a similar flexibility over the kind of plot to draw. This is a FacetGrid, and does not have the ax parameter, so it will not work with matplotlib.pyplot.subplots.

histplot(), an axes-level function for plotting histograms, including with kernel density smoothing. This does have the ax parameter, so it will work with matplotlib.pyplot.subplots.

找出正確的函數

對於任何沒有 ax 參數的seaborn 函數,有一個對應的軸級函數可以替代。 要找到正確的函數,您可以參考圖形級繪圖的seaborn文件來尋找合適的軸級繪圖函數。

這裡是沒有軸的圖形級繪圖的列表參數:

  • relplot
  • displot
  • catplot
  • displot

catplot在同一行繪製不同的圖

在此在這種情況下,目標是在同一行上繪製兩個不同的直方圖。 由於 displot 是圖形級函數,且沒有 ax 參數,因此它不能與 matplotlib.pyplot.subplots 一起使用。 在這種情況下,正確使用的函數是 histplot,它是一個具有 ax 參數的軸級函數。

以下是使用 histplot 在同一行上繪製兩個不同直方圖的範例:

<code class="python">import seaborn as sns
import matplotlib.pyplot as plt

# load data
penguins = sns.load_dataset("penguins", cache=False)

# select the columns to be plotted
cols = ['bill_length_mm', 'bill_depth_mm']

# create the figure and axes
fig, axes = plt.subplots(1, 2)
axes = axes.ravel()  # flattening the array makes indexing easier

for col, ax in zip(cols, axes):
    sns.histplot(data=penguins[col], kde=True, stat='density', ax=ax)

fig.tight_layout()
plt.show()</code>

這將產生一個在同一行上繪製兩個直方圖的圖形。

從多個資料幀繪製不同的圖

如果您有多個資料幀,您可以將它們組合起來使用pandas pd.concat,然後使用分配方法建立一個標識「來源」列,該列可用於指定row=或col=,或作為色調參數

<code class="python"># list of dataframe
lod = [df1, df2, df3]

# create one dataframe with a new 'source' column to use for row, col, or hue
df = pd.concat((d.assign(source=f'df{i}') for i, d in enumerate(lod, 1)), ignore_index=True)</code>

然後你可以使用此組合數據框使用seaborn繪製各種不同的圖。

有關更多信息,請參閱以下資源:

  • [Seaborn 文件](https://seaborn.pydata .org/)
  • [使用Matplotlib繪製子圖](https://matplotlib.org/stable/tutorials/intermediate/subplots.html)
  • [Seaborn 和Pandas 整合](https: //seaborn.pydata.org/tutorial/using_pandas. html)

以上是如何在定義的 Matplotlib 子圖中繪製 Seaborn 圖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn