seaborn 未在定义的子图内绘图

2025-01-13 08:52:00
admin
原创
97
摘要:问题描述:我正在尝试用此代码并排绘制两个图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...

问题描述:

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

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)

它返回以下结果(两个空的子图,后面跟着两行各一个的显示图)-

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

如果我尝试使用 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)

在此处输入图片描述

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


解决方案 1:

  • seaborn.distplot已被DEPRECATED替换seaborn 0.11为以下内容:

    • displot(),一个图形级函数,对要绘制的图类型具有类似的灵活性。这是一个FacetGrid,并且没有ax参数,因此它不能与 一起使用matplotlib.pyplot.subplots

    • histplot(),用于绘制直方图的轴级函数,包括核密度平滑。它确实有ax参数,因此可以与一起使用matplotlib.pyplot.subplots

  • 它适用于任何seaborn FacetGrid没有ax参数的图。使用等效的轴级图。

    • 查看图形级绘图的文档以找到适合您需要的轴级绘图函数。

    • 参见图形级与轴级函数

      • 图形级别:relplot,,displot`catplot`

  • 因为需要两列不同数据的直方图,所以使用起来比较方便histplot

  • 请参阅如何绘制多个子图,了解绘制子图的多种不同方法maplotlib.pyplot.subplots

  • 还请查看seaborn histplot 和 displot 输出不匹配

  • 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)

导入和 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

轴水平图

  • 对于宽格式的数据,使用sns.histplot

  • .ravel、、.flatten都将数组.flat转换axes为一维。

    • numpy 中的 flatten 和 ravel 函数有什么区别?

    • numpy flat 和 ravel() 之间的区别

    • 绘制子图时如何修复“numpy.ndarray”对象没有属性“get_figure”

# 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()

在此处输入图片描述

图形层次图

  • 对于长格式的数据框,使用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})

多个 DataFrame

  • 如果有多个数据框,它们可以与 组合pd.concat,并用于.assign创建标识'source'列,可用于row=col=hue=

# 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)
  • 请参阅将多个 csv 文件导入 pandas 并连接成一个 DataFrame,以将多个文件读入具有标识列的单个数据框。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用