我在使用Seaborn在Python中创建的图中添加误差条时遇到了一些困难。
我目前有一个'csv'格式的 Dataframe ;
TSMdatabase = 'TSMvsRunmaster.csv';
tsmdf = pd.read_csv(TSMdatabase, sep=',');
Dataframe的标题格式如下:
Run,TSMX_Value,TSMX_Error,TSMX+1_Value,TSMX+1_Error,Source
然后使用for循环读入不同的TSM值:
TSM = ['001', '002', '003', '004', '010', '011', '012',
'013', '016', '017', '101', '102', '104', '105', '106']
for x in TSM:
tsm = x
最后,我给了我一张图:
plt.figure()
sns.set_style("darkgrid")
ax = sns.stripplot(x="Run", y='TSM'+str(tsm)+'_Value', hue="Source", data=tsmdf,
jitter=True, palette="Set2", split=True)
plt.xticks(rotation=40)
plt.title('Run TSM'+str(tsm)+' Comparison')
plt.show()
不带误差线的特定TSM图
如果我尝试添加误差线,最终在每个子数据集的中间只有一个误差线:
每个源代码,Python和Matlab实际上在 Dataframe 中有自己的错误!
谁有什么主意!真的非常感谢!
1条答案
按热度按时间w8biq8rn1#
绘制平均值+误差更适合
sns.pointplot()
而不是sns.stripplot()
。Seaborn文件中指出了这一点:sns.pointplot使用散点图图示符显示点估计值和置信区间。点图通过散点图点的位置表示数值变量的集中趋势估计值,并使用误差条提供该估计值周围的不确定性的一些指示。
sns.stripplot绘制一个散点图,其中一个变量是分类的。带状图可以单独绘制,但在您希望显示所有观察结果沿着潜在分布的一些表示的情况下,它也是对箱线图或小提琴图的很好补充。
如果您可以访问所有观测值,而不仅仅是平均值+误差,那么您可以通过以下方式实现您想要的结果:
您可以使用
ci
参数将置信区间的类型从默认的95%更改为:在上文中,Seaborn计算了误差和集中趋势的测量值。如果您已经预先计算了这些值,则会有一点麻烦,因为目前不可能使用带有预先计算的误差条的
sns.pointplot()
。在使用sns.pointplot()
绘制均值后,我使用plt.errorbar()
添加误差:你也可以使用matplotlib直接绘制整个图,如果你手动提供x位置,类似于this example。