繁体   English   中英

如何使用 Seaborn 在同一图上绘制多个直方图

[英]How To Plot Multiple Histograms On Same Plot With Seaborn

使用 matplotlib,我可以在一个图上使用两个数据集制作直方图(一个挨着另一个,而不是重叠)。

import matplotlib.pyplot as plt
import random

x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
plt.hist([x, y])
plt.show()

这产生了以下情节。

在此处输入图片说明

但是,当我尝试使用 seabron 执行此操作时;

import seaborn as sns
sns.distplot([x, y])

我收到以下错误:

ValueError: color kwarg must have one color per dataset

那么我尝试添加一些颜色值:

sns.distplot([x, y], color=['r', 'b'])

我得到了同样的错误。 我看到这篇关于如何叠加图形的帖子,但我希望这些直方图并排放置,而不是叠加。

查看文档,它没有指定如何将列表列表包含为第一个参数“a”。

如何使用 seaborn 实现这种直方图风格?

如果我理解正确,您可能想尝试以下操作:

fig, ax = plt.subplots()
for a in [x, y]:
    sns.distplot(a, bins=range(1, 110, 10), ax=ax, kde=False)
ax.set_xlim([0, 100])

这应该产生这样的情节:

在此处输入图片说明

更新

看起来您想要“seaborn 外观”而不是 seaborn 绘图功能。 为此,您只需要:

import seaborn as sns
plt.hist([x, y], color=['r','b'], alpha=0.5)

这将产生:

在此处输入图片说明

将 x 和 y 合并到 DataFrame,然后使用带有 multiple='dodge' 和 Hue 选项的 histplot:

import matplotlib.pyplot as plt
import pandas as pd
import random

x = [random.randrange(100) for i in range(100)]
y = [random.randrange(100) for i in range(100)]
df = pd.concat(axis=0, ignore_index=True, objs=[
    pd.DataFrame.from_dict({'value': x, 'name': 'x'}),
    pd.DataFrame.from_dict({'value': y, 'name': 'y'})
])
fig, ax = plt.subplots()
sns.histplot(data=df, x='value', hue='name', multiple='dodge', bins=range(1, 110, 10), ax=ax)
ax.set_xlim([0, 100])

这是绘图结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM