seaborn 未在定义的子图内绘图

2025-01-13 08:52:00
admin
原创
99
摘要:问题描述:我正在尝试用此代码并排绘制两个图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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用