Matplotlib带误差棒柱状图出现连线问题的解决方法咨询
问题:Matplotlib柱状图误差棒间出现线性连线的成因与修复
问题现象
使用Matplotlib绘制带误差棒的柱状图时,各误差棒之间出现了不必要的线性连线,误差棒被直线串联在一起。
代码实现
for k in range(1,(len(Durchgansmarker)*2)+1): if k<=int(len(Durchgansmarker)): globals()[f'rects{k}_error'] =axes_1.errorbar(x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2 ,globals()[f'y_tr_mean_E{k}'], yerr=globals()[f'y_tr_std_E{k}'], capsize=5, ecolor="k", elinewidth=2,barsabove='False' ,zorder=4)#fmt="o", color="r" globals()[f'rects{k}'] = axes_1.bar(x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2 ,globals()[f'y_tr_mean_E{k}'],width_bar, color=color_Bars[k-1],zorder=3)#,yerr=[globals()[f'y_tr_std_E{k}']] else: globals()[f'rects{k}_error'] =axes_1.errorbar(x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2 ,globals()[f'y_ge_mean_E{k-3}'], yerr=globals()[f'y_ge_std_E{k-3}'], capsize=5, ecolor="k", elinewidth=2,barsabove='False' ,zorder=4)#fmt="o", color="r" globals()[f'rects{k}'] = axes_1.bar(x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2,globals()[f'y_ge_mean_E{k-3}'],width_bar, color=color_Bars[k-1],zorder=3)
相关数据
柱状图与误差棒对应的y值为多组离散数据,每组对应一个柱状条的均值和标准差。
成因分析
errorbar()函数默认会用线条连接所有输入的x、y数据点。你的代码中,x是包含多个数值的数组(对应多个柱状条的位置),每次调用errorbar()时传入的是一组x位置和对应的y均值,这会触发函数将这一组x的所有点用直线连接,从而形成误差棒间的多余连线。
修复方法
在调用errorbar()时添加fmt='none'参数,明确指定只绘制误差棒,不绘制数据点之间的连线。同时注意barsabove参数需要传入布尔值False而非字符串'False',否则参数无法正常生效。
修改后的关键代码片段
# 第一组误差棒调用 globals()[f'rects{k}_error'] =axes_1.errorbar( x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2, globals()[f'y_tr_mean_E{k}'], yerr=globals()[f'y_tr_std_E{k}'], capsize=5, ecolor="k", elinewidth=2, barsabove=False, zorder=4, fmt='none' # 禁用数据点连线 ) # 第二组误差棒调用同理 globals()[f'rects{k}_error'] =axes_1.errorbar( x -Anzahl_Balken/2*width_bar+(k*width_bar)-width_bar/2, globals()[f'y_ge_mean_E{k-3}'], yerr=globals()[f'y_ge_std_E{k-3}'], capsize=5, ecolor="k", elinewidth=2, barsabove=False, zorder=4, fmt='none' )
内容的提问来源于stack exchange,提问作者CarstenWE
相关产品推荐
相关产品推荐

