pandas 如何绘制每组的直方图子图

ws51t4hk  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(181)

当我运行下面的代码时,我得到了4个不同的直方图,它们是按组分开的。我如何使用4个不同的sns.distplot()来实现相同类型的可视化?

df = pd.DataFrame({
    "group": [1, 1, 2, 2, 3, 3, 4, 4],
    "similarity": [0.1, 0.2, 0.35, 0.6, 0.7, 0.25, 0.15, 0.55]
})

df['similarity'].hist(by=df['group'])

q8l4jmvw

q8l4jmvw1#

您可以从seaborn使用FacetGrid

import seaborn as sns

g = sns.FacetGrid(data=df, col='group', col_wrap=2)
g.map(sns.histplot, 'similarity')

输出:

dldeef67

dldeef672#

  • seabornmatplotlib的高级API,pandas使用matplotlib作为默认绘图后端。
  • seaborn v0.11.2开始,sns.distplot已弃用,根据文档中的警告,不建议直接使用FacetGrid
  • sns.distplot被轴级函数sns.histplot和图形级函数sns.displot替换。
  • 参见seaborn histplot and displot output doesn't match
  • 生成图很容易,但不一定能生成正确的图,除非您知道每个API的不同参数默认值。
  • 注意common_binsTrueFales之间的区别。
    *python 3.10pandas 1.4.2matplotlib 3.5.1seaborn 0.11.2中测试

common_bins=False

import seaborn as sns

# plot
g = sns.displot(data=df, x='similarity', col='group', col_wrap=2, common_bins=False, height=4)

common_bins=True(4)

  • sns.displotpandas.DataFrame.plotkind='hist'bins=4产生相同的图。
g = sns.displot(data=df, x='similarity', col='group', col_wrap=2, common_bins=True, bins=4, height=4)

# reshape the dataframe to a wide format
dfp = df.pivot(columns='group', values='similarity')

axes = dfp.plot(kind='hist', subplots=True, layout=(2, 2), figsize=(9, 9), ec='k', bins=4, sharey=True)

相关问题