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

Matplotlib变量误绘至同一子图:如何分离子图绘制带误差棒变量

解决Matplotlib子图中误差棒绘制到同一子图的问题

嗨,这个问题我之前也碰到过!核心原因就是你没有明确指定每个绘图操作对应的子图坐标轴,Matplotlib默认会把所有绘图内容都放到最后激活的子图(也就是你的代码里的ax2)中。

下面是修改后的完整代码,能实现两个变量分别在独立子图中绘制带误差棒的图形:

from pandas import DataFrame, date_range, Timedelta
import numpy as np
from matplotlib import pyplot as plt

# 生成测试数据
rng = date_range(start='2015-01-01', periods=5, freq='24H')
df = DataFrame({'y':np.random.normal(size=len(rng))}, index=rng)
y1 = df['y']
y2 = (y1*3)
sd1 = (y1*2)
sd2 = (y1*2)

# 创建2行1列的子图,共享x轴让图形更协调
fig,(ax1,ax2) = plt.subplots(2,1,sharex=True, figsize=(8,6))

# 把y1的误差棒绘制到第一个子图ax1
ax1.errorbar(x=y1.index, y=y1.values, yerr=sd1.values, fmt='-o', capsize=5)
ax1.set_title('变量y1的带误差棒图形')
ax1.set_ylabel('y1数值')

# 把y2的误差棒绘制到第二个子图ax2
ax2.errorbar(x=y2.index, y=y2.values, yerr=sd2.values, fmt='-s', capsize=5, color='orange')
ax2.set_title('变量y2的带误差棒图形')
ax2.set_ylabel('y2数值')
ax2.set_xlabel('日期')

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

关键的几个注意点:

  • 调用errorbar时,通过指定ax1/ax2明确绑定对应的子图,这是解决问题的核心
  • fmt参数可以自定义线条和标记的样式,capsize用来设置误差棒两端的小帽子长度,提升可读性
  • 如果习惯用Pandas的plot方法,也可以写成y1.plot(ax=ax1, yerr=sd1, kind='errorbar', capsize=5),效果完全一致
  • sharex=True让两个子图共享x轴,不仅节省空间,也让数据对比更直观
  • tight_layout()会自动调整子图之间的间距,避免标题和标签互相遮挡

内容的提问来源于stack exchange,提问作者edson1991

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:04