seaborn 未在定义的子图中绘制

cal*_*ant 10 python data-visualization seaborn

我正在尝试使用此代码并排绘制两个分布图

fig,(ax1,ax2) = plt.subplots(1,2)

sns.displot(x =X_train['Age'], hue=y_train, ax=ax1)
sns.displot(x =X_train['Fare'], hue=y_train, ax=ax2)
Run Code Online (Sandbox Code Playgroud)

它返回以下结果(两个空的子图,后跟一个分布在两行上的图)-

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

如果我用 violinplot 尝试相同的代码,它会按预期返回结果

fig,(ax1,ax2) = plt.subplots(1,2)

sns.violinplot(y_train, X_train['Age'], ax=ax1)
sns.violinplot(y_train, X_train['Fare'], ax=ax2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

为什么 displot 返回不同类型的输出,我该怎么做才能在同一行上输出两个图?

Tre*_*ney 13

  • 来自 的文档seaborn.distplot,该文档已DEPRECATEDseaborn 0.11.
  • .distplot 替换为以下内容:
    • displot(),一个图形级函数,对绘制的绘图类型具有类似的灵活性。这是一个FacetGrid, 没有ax参数。
    • histplot(),用于绘制直方图的轴级函数,包括内核密度平滑。这确实有ax参数。
  • 它适用于任何seaborn FacetGrid没有ax参数的图。使用等效的轴级图。
  • 因为需要两个不同列的直方图,所以更容易使用histplot
  • 请参阅如何在多个子图中绘图以了解多种不同的绘图方式maplotlib.pyplot.subplots
  • seaborn 0.11.1& 中测试matplotlib 3.4.2
fig,(ax1,ax2) = plt.subplots(1,2)

sns.histplot(x=X_train['Age'], hue=y_train, ax=ax1)
sns.histplot(x=X_train['Fare'], hue=y_train, ax=ax2)
Run Code Online (Sandbox Code Playgroud)

导入和 DataFrame 示例

import seaborn as sns
import matplotlib.pyplot as plt

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

# display(penguins.head())
  species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex
0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    MALE
1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  FEMALE
2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  FEMALE
3  Adelie  Torgersen             NaN            NaN                NaN          NaN     NaN
4  Adelie  Torgersen            36.7           19.3              193.0       3450.0  FEMALE
Run Code Online (Sandbox Code Playgroud)

轴水平图

  • 对于宽格式的数据,使用 sns.histplot
# 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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

图水平图

  • 使用长格式的数据帧,使用 displot
# create a long dataframe
dfl = penguins.melt(id_vars='species', value_vars=['bill_length_mm', 'bill_depth_mm'], var_name='bill_size', value_name='vals')

# display(dfl.head())
  species       bill_size  vals
0  Adelie  bill_length_mm  39.1
1  Adelie   bill_depth_mm  18.7
2  Adelie  bill_length_mm  39.5
3  Adelie   bill_depth_mm  17.4
4  Adelie  bill_length_mm  40.3

# plot
sns.displot(data=dfl, x='vals', col='bill_size', kde=True, stat='density', common_bins=False, common_norm=False, height=4, facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

5567 次

最近记录:

4 年,1 月 前