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])
绘制预先计算的误差条形图。