Python 如何将matplotlib.errorbar正确叠加到seaborn.barplot上?
我试图在一个Python 如何将matplotlib.errorbar正确叠加到seaborn.barplot上?,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我试图在一个seaborn.barplot中把一些实验数据叠加在一些模拟数据上。问题是我无法找出如何提取x轴上的条形位置。下面是一个简单的例子: simulated_data = pandas.DataFrame({ 'condition': ['A']*4 + ['B']*4, 'Protein': ['w', 'x', 'y', 'z']*2, 'data': numpy.random.uniform(10, 11, 8) })
seaborn.barplot
中把一些实验数据叠加在一些模拟数据上。问题是我无法找出如何提取x轴上的条形位置。下面是一个简单的例子:
simulated_data = pandas.DataFrame({
'condition': ['A']*4 + ['B']*4,
'Protein': ['w', 'x', 'y', 'z']*2,
'data': numpy.random.uniform(10, 11, 8)
})
experimental_data = pandas.DataFrame({
'condition': ['A']*4 + ['B']*4,
'Protein': ['w', 'x', 'y', 'z']*2,
'data': numpy.random.uniform(10, 11, 8)
})
errors = pandas.DataFrame({
'condition': ['A']*4 + ['B']*4,
'Protein': ['w', 'x', 'y', 'z']*2,
'data': numpy.random.uniform(0, 1, 8)
})
plt.figure()
seaborn.barplot(data=simulated_data, y='data', x='Protein', hue='condition')
plt.errorbar(range(simulated_data.shape[0]), experimental_data['data'], yerr=errors['data'],
marker='_', mec='blue', zorder=1, elinewidth=1, capsize=2, ecolor='blue',
linestyle="None", markersize=10
)
plt.show()
然后给
如何修改此代码以获得与条形一致的错误?您可以使用矩形面片上的
get_xy()
获得条形面片的x和y位置,矩形面片将返回(x,y)坐标的元组。为了获得杆中心的坐标,需要增加杆宽的一半
请注意,如果希望它们显示在条形图的顶部,可能必须增加plt.errorbar
中的zorder
import seaborn as sns
plt.figure()
abar = sns.barplot(data=simulated_data, y='data', x='Protein', hue='condition')
x_list = []
for patch in abar.patches:
x_list.append(patch.get_xy()[0]+(patch._width/2))
plt.errorbar(x_list, experimental_data['data'], yerr=errors['data'],
marker='_', mec='blue', zorder=10, elinewidth=1, capsize=2, ecolor='blue',
linestyle="None", markersize=10)
可能也值得增加zorder,因为垂直误差条似乎位于条形图的后面。在我发布之后,我注意到了这一点。我现在已经更新了答案,非常重要的一点是:使用中的数据帧需要按色调列排序。