Matplotlib errorbar绘制异常:需单条线却生成多条连线求助
解决Matplotlib errorbar绘制出多条连线的问题
问题根源在于你的x_values是字典image_data['some_parameter']的keys,而如果这些keys本身不是按从小到大的数值顺序(或你期望的逻辑顺序)排列的,errorbar会按照keys的原始顺序连接数据点,导致连线交叉错乱,看起来像多条线。
修复方法:按x值排序后再绘图
有两种简单的实现方式:
方式1:先排序x,再重新生成y和误差值
# 先对x的keys进行排序 x_values = sorted(image_data['some_parameter'].keys()) # 按排序后的x顺序生成对应的y均值和误差 y_values = [ np.mean(image_data['some_parameter'][x]) for x in x_values ] yerr = [ statistics.stdev(image_data['some_parameter'][x]) for x in x_values ] plt.errorbar(x_values, y_values, yerr=yerr, capsize=5, ecolor="red") plt.show()
方式2:打包数据后整体排序
如果已经生成了原始的x、y、yerr列表,可以打包后按x值排序再拆分:
# 打包x、y、误差为元组列表 data_pairs = list(zip(x_values, y_values, yerr)) # 按x值从小到大排序 data_pairs_sorted = sorted(data_pairs, key=lambda item: item[0]) # 拆分回排序后的数组 x_sorted, y_sorted, yerr_sorted = zip(*data_pairs_sorted) plt.errorbar(x_sorted, y_sorted, yerr=yerr_sorted, capsize=5, ecolor="red") plt.show()
如果你的x是字符串类型(如样本名称),需要自定义排序逻辑,比如提取字符串中的数字进行排序:
# 假设x是类似"sample_1", "sample_3", "sample_2"的字符串 x_values = sorted(image_data['some_parameter'].keys(), key=lambda s: int(s.split('_')[1]))
内容的提问来源于stack exchange,提问作者ziad_dp
相关产品推荐
相关产品推荐

