You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中误差棒沿X轴向右偏移1个单位的解决咨询

问题描述

绘制带虚线连接的散点图并添加误差棒时,误差棒沿X轴向右偏移1个单位,无法与虚线重合。尝试给x1加1时出现整数与字符串类型不兼容问题,调整xlim至0也未解决。相关代码如下:

import matplotlib.pyplot as plt
import numpy as np

#House A
x1=[1, 2, 3]
y1=[44.23777993, 1.412909458, 0.07779971243]    
#House B    
x2=[1, 2, 3]
y2=[6.19927899,1.00263735,0.09018145733]
#House C
x3=[1, 2, 3]
y3=[5.631459288,3.198409548,2.141106453]
#House D
x4=[1, 2, 3]
y4=[1.545221235,0.065499083,0]

#error bar values
#HouseA
y1error=[0.07781274738, 0.394854516, 1.040530416]
#HouseB
y2error=[0.1445699413, 0.4590436542, 1.303785259]
#HouseC
y3error=[0.08168626561, 0.1449873167, 0.1714882825]
#HouseD
y4error=[0.1737233193, 1.1360461, 0]

plt.plot([str(i) for i in x1], y1, linestyle='dashed', marker='s')
plt.plot([str(i) for i in x2], y2, linestyle='dashed', marker='s')
plt.plot([str(i) for i in x3], y3, linestyle='dashed', marker='s')
plt.plot([str(i) for i in x4], y4, linestyle='dashed', marker='s')

#error bars
plt.errorbar(x1, y1, yerr=y1error,  color='cornflowerblue', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x2,y2,yerr=y2error,color='darkmagenta', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x3, y3,yerr=y3error,  color='olivedrab', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x4,y4,yerr=y4error, color='goldenrod', ecolor='k', capsize=8, capthick=0.8)

axis_x= range(1,3)
axis_y=range(0,70)
plt.ylim((0,70))
plt.rcParams['figure.figsize'] = [8, 6]


plt.show()
解决方法

偏移问题的核心原因是X轴数据类型不统一:plt.plot使用了字符串类型的X值,而plt.errorbar使用了整数类型的X值,Matplotlib对两种类型的刻度定位逻辑不同,导致错位。

关键修正步骤

  • 统一所有绘图函数的X轴数据类型,全部使用整数类型的原始X值,不要将X值转换为字符串
  • 若需要自定义X轴刻度显示为字符串,单独通过plt.xticks()设置,而非修改原始X数据

修正后的完整代码

import matplotlib.pyplot as plt
import numpy as np

# House A
x1 = [1, 2, 3]
y1 = [44.23777993, 1.412909458, 0.07779971243]    
# House B    
x2 = [1, 2, 3]
y2 = [6.19927899, 1.00263735, 0.09018145733]
# House C
x3 = [1, 2, 3]
y3 = [5.631459288, 3.198409548, 2.141106453]
# House D
x4 = [1, 2, 3]
y4 = [1.545221235, 0.065499083, 0]

# error bar values
# House A
y1error = [0.07781274738, 0.394854516, 1.040530416]
# House B
y2error = [0.1445699413, 0.4590436542, 1.303785259]
# House C
y3error = [0.08168626561, 0.1449873167, 0.1714882825]
# House D
y4error = [0.1737233193, 1.1360461, 0]

# 统一使用整数类型X值绘图,移除字符串转换
plt.plot(x1, y1, linestyle='dashed', marker='s', color='cornflowerblue')
plt.plot(x2, y2, linestyle='dashed', marker='s', color='darkmagenta')
plt.plot(x3, y3, linestyle='dashed', marker='s', color='olivedrab')
plt.plot(x4, y4, linestyle='dashed', marker='s', color='goldenrod')

# 误差棒使用相同的X值,确保与折线对齐
plt.errorbar(x1, y1, yerr=y1error, color='cornflowerblue', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x2, y2, yerr=y2error, color='darkmagenta', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x3, y3, yerr=y3error, color='olivedrab', ecolor='k', capsize=8, capthick=0.8)
plt.errorbar(x4, y4, yerr=y4error, color='goldenrod', ecolor='k', capsize=8, capthick=0.8)

# 设置Y轴范围与图形大小
plt.ylim((0, 70))
plt.rcParams['figure.figsize'] = [8, 6]

# 若需要将X轴刻度显示为字符串,取消下方注释
# plt.xticks(x1, [str(i) for i in x1])

plt.show()

内容的提问来源于Stack Exchange,提问作者Hoskin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:50:20