使用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关于如何叠加图形,但我希望这些直方图是并排的,而不是叠加的。
查看docs它并没有指定如何将列表列表作为第一个参数' a'。
如何使用seaborn实现这种直方图?
答案 0 :(得分:28)
如果我理解正确你可能想尝试一下这个:
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])
哪个应该产生这样的情节:
<强>更新强>:
看起来你想要&#39; seaborn look&#39;而不是seaborn绘图功能。 为此,您只需要:
import seaborn as sns
plt.hist([x, y], color=['r','b'], alpha=0.5)
将产生:
答案 1 :(得分:2)
将 x 和 y 合并到 DataFrame,然后使用带有 multiple='dodge' 和色调选项的 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])