gpt4 book ai didi

python - 如何使用 seaborn 绘制成对直方图

转载 作者:行者123 更新时间:2023-12-04 00:17:55 28 4
gpt4 key购买 nike

我想制作一个成对的直方图,就像显示的 here使用 seaborn distplot。这种图也可以称为 背靠背直方图 所示 here , 或 bihistogram 沿 x 轴倒置/镜像,如所讨论的 here .

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

green = np.random.normal(20,10,1000)
blue = np.random.poisson(60,1000)

fig, ax = plt.subplots(figsize=(8,6))

sns.distplot(blue, hist=True, kde=True, hist_kws={'edgecolor':'black'}, kde_kws={'linewidth':2}, bins=10, color='blue')
sns.distplot(green, hist=True, kde=True, hist_kws={'edgecolor':'black'}, kde_kws={'linewidth':2}, bins=10, color='green')
ax.set_xticks(np.arange(-20,121,20))
ax.set_yticks(np.arange(0.0,0.07,0.01))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.show()

这是输出: seaborn distplot

当我使用 here 讨论的方法时(plt.barh),我得到了下面显示的条形图,这不是我想要的。 horizontal bar plot

或者我可能对解决方法还不够了解...python-seaborn-distplot 的简单/简短实现,类似于 these各种情节将是完美的。我编辑了上面第一个图的图形,以显示我希望实现的图(尽管 y 轴没有倒置): paired histogram

任何线索将不胜感激。

最佳答案

您可以使用两个子图并反转下一个的 y 轴并使用相同的 bin 进行绘图。

df = pd.DataFrame({'a': np.random.normal(0,5,1000), 'b': np.random.normal(20,5,1000)})

fig =plt.figure(figsize=(5,5))
ax = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

bins = np.arange(-20,40)

ax.hist(df['a'], bins=bins)
ax2.hist(df['b'],color='orange', bins=bins)
ax2.invert_yaxis()

enter image description here

编辑:

@mwaskom 提出的改进建议

fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(5,5))

bins = np.arange(-20,40)

for ax, column, color, invert in zip(axes.ravel(), df.columns, ['teal', 'orange'], [False,True]):
ax.hist(df[column], bins=bins, color=color)

if invert:
ax.invert_yaxis()

plt.subplots_adjust(hspace=0)

enter image description here

关于python - 如何使用 seaborn 绘制成对直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62678411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com