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

8yparm6h  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(235)

使用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'])

我也得到了同样的错误。我看到了this post关于如何叠加图表,但我希望这些直方图并排,而不是叠加。
看看文档,它没有指定如何将列表的列表作为第一个参数"a"。
我怎样才能实现这种风格的直方图使用海运?

hc8w905p

hc8w905p1#

如果我没理解错的话,你可能想试试这个:

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

这将生成如下图:

    • 更新**:

看起来您需要"海运外观"而不是海运绘图功能。为此,您只需要:

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

这将产生:

    • 更新**适用于seaborn版本0.12+:

seaborn v0.12之后,要获得海运样式的图,您需要:

import seaborn as sns
sns.set_theme()  # <-- This actually changes the look of plots.
plt.hist([x, y], color=['r','b'], alpha=0.5)

有关详细信息,请参见seaborn docs

8tntrjer

8tntrjer2#

将x和y合并到DataFrame中,然后使用histplot和multiple='dodge'以及色调选项:

import random

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

x = [random.randrange(100) for _ in range(100)]
y = [random.randrange(100) for _ 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])

相关问题