Matplotlib 海伯恩直方图

Matplotlib 海伯恩直方图,matplotlib,plot,seaborn,Matplotlib,Plot,Seaborn,我想画一个直方图,比较两个数据数组。基本上,我想做的就是: 假设我想绘制这个图,但使用两个数组,其中有四个条目,一个带有数字,应该指向蓝色区域,另一个带有蓝色区域的数字。我试过这个: x1 = np.array([0.1,0.2,0.3]) x2 = np.array([0.1,0.2,0.5]) sns.histplot(data=[x1,x2], x=['1','2','3'], multiple="dodge", hue=['a','b'], shrink=.8)

我想画一个直方图,比较两个数据数组。基本上,我想做的就是:

假设我想绘制这个图,但使用两个数组,其中有四个条目,一个带有数字,应该指向蓝色区域,另一个带有蓝色区域的数字。我试过这个:

x1 = np.array([0.1,0.2,0.3])
x2 = np.array([0.1,0.2,0.5])
sns.histplot(data=[x1,x2], x=['1','2','3'], multiple="dodge", hue=['a','b'], shrink=.8)
但是它给了我一个错误“ValueError:数组必须都是相同长度的”

我知道我应该输入df而不是数组,但遗憾的是,我并不是如何使用它们的专家。
我怎样才能解决这个问题?简单地说,我在这里寻找一个复制粘贴解决方案,然后我可以在其中更改数字和列的名称。

看起来您需要的是条形图,而不是直方图。从多个列创建seaborn绘图通常需要将它们转换为,这使得过程不那么简单

以下是一个例子:

导入matplotlib.pyplot作为plt
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
x1=np.数组([0.1,0.2,0.3])
x2=np.数组([0.1,0.2,0.5])
x=['1','2','3']#或者更简单地说,x=np.arange(len(x1))+1
df=pd.DataFrame({'a':x1,'b':x2,'x':x})
df_long=df.melt('x')
ax=sns.barplot(数据=df_long,x='x',y='value',道奇=True,色调='variable')
plt.show()

长格式如下所示:

   x variable  value
0  1        a    0.1
1  2        a    0.2
2  3        a    0.3
3  1        b    0.1
4  2        b    0.2
5  3        b    0.5

有关其他选项,如命名创建的列,请参见。

这正是我想要的,谢谢!关于如何使身材更“美丽”,你有什么建议(甚至只是链接)吗?(比如我贴的那张)你可以试一下。例如,开始时
sns.set_style('white')
,结束时
sns.skeene()
。如果为每个x位置提供大量值,Seaborn会计算这些错误条。默认情况下,绘制平均值的95%置信区间。使用
ci='sd'
它将计算标准偏差(但也需要所有数据)。你所说的“只有一种颜色”是什么意思?只有
sns.barplot(data=df_long,x='x',y='value',ci='sd')
?那么
sns.barplot(data=df_long,x='x',y='value',ci='sd')
对你有用吗?对于当前数据,第三个值只有一个误差条,因为前两个值的标准偏差为0。如果每个值只有一个条形图,您也可以使用
sns.barplot(data=df_long,x='x',y='value',ci=None,yerr=[sd1,sd2,sd3])
绘制预先计算的误差条形图。