我在使用Seaborn在Python中创建的情节中添加错误栏时遇到了一些困难。
我目前有一个'csv'格式的数据框;
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实际上在数据框中都有自己的错误!
有没有人有任何想法!非常感谢你!
答案 0 :(得分:4)
绘制平均值+误差比sns.pointplot()
更适合sns.stripplot()
。这在Seaborn文档中有说明:
sns.pointplot 使用散点图字形显示点估计值和置信区间。点图表示散点图点位置对数值变量集中趋势的估计,并使用误差条提供围绕该估计的不确定性的一些指示。
sns.stripplot 绘制一个散点图,其中一个变量是分类的。条形图可以单独绘制,但如果您想要显示所有观察结果以及底层分布的某些表示,它也是一个盒子或小提琴图的良好补充。
如果您可以访问所有观察结果,而不仅仅是平均值+错误,那么您可以通过以下方式实现所需:
import seaborn as sns
%matplotlib inline
tips = sns.load_dataset('tips')
sns.pointplot('sex', 'tip', hue='smoker',
data=tips, dodge=True, join=False)
您可以使用ci
参数更改默认95%的置信区间类型:
sns.pointplot('sex', 'tip', hue='smoker',
data=tips, dodge=True, join=False, ci='sd')
在上文中,Seaborn计算了误差和集中趋势的测量值。如果您已经预先计算了这些数据,那就有点棘手了,因为目前无法使用sns.pointplot()
预先计算的错误条。在使用plt.errorbar()
绘制均值后,我使用sns.pointplot()
添加了错误:
ax = sns.pointplot('sex', 'tip', hue='smoker',
data=tips, dodge=True, join=False, ci=None)
# Find the x,y coordinates for each point
x_coords = []
y_coords = []
for point_pair in ax.collections:
for x, y in point_pair.get_offsets():
x_coords.append(x)
y_coords.append(y)
# Calculate the type of error to plot as the error bars
# Make sure the order is the same as the points were looped over
errors = tips.groupby(['smoker', 'sex']).std()['tip']
colors = ['steelblue']*2 + ['coral']*2
ax.errorbar(x_coords, y_coords, yerr=errors,
ecolor=colors, fmt=' ', zorder=-1)
您也可以直接使用matplotlib作为整个图,如果您手动提供x位置,则类似于this example。