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

如何在matplotlib.pyplot中设置统一Y轴以展示数据细微差异

问题:Matplotlib绘图Y轴堆叠,数据点无法正常区分

我尝试在同一坐标轴上绘制多组数据点,展示数据间的细微差异,但绘图时Y轴出现堆叠,数据点近乎重复而非混合显示。只能使用numpy、math和matplotlib.pyplot库。

我能画出包含两条线的图表,但每次调用plot时Y轴都会被重置(出现堆叠)。已经尝试设置plt.ylim(0,1000)、将多组(x,y)放入同一条plot语句等方法,问题仍未解决。

  • 错误图表表现:Y轴堆叠,数据点重叠,无法区分差异
  • 正确图表表现:Y轴范围正常,数据点清晰区分

使用的导入语句

import numpy as np
import matplotlib.pyplot as plt 

当前出现问题的代码

getKey = [m for m in data] 

# 反转理想值列表
ideal2 = (data[getKey[0]])
ideal2r = []
for k in ideal2:
    ideal2r.insert(0,k)

# 反转实际值列表
actual2 = (data[getKey[1]])
actual2r = []
for k in actual2:
    actual2r.insert(0,k)

# 反转测量值列表
measured2 = (data[getKey[2]])
measured2r = []
for k in measured2:
    measured2r.insert(0,k)

# 绘制理想值与实际值对比图(横轴为0-30的增量incs)
plt.plot(incs,ideal2r,'b', label = 'ideal')
plt.plot(incs,actual2r,'r', label = 'actual')
# plt.axis('equal')
plt.legend()
plt.show()

# 绘制实际值与测量值对比图(横轴为0-30的增量incs)
plt.plot(incs,actual2r,'b', label = 'actual')
plt.plot(incs,measured2r,'r', label = 'measured')
# plt.axis('equal')
plt.legend()
plt.show()

对比:正常显示的函数代码

该函数中所有线条能在同一Y轴(0,1000)上正常显示:

k = np.linspace(0,9,10)
x = [1000, 750, 563, 422, 316, 237, 178, 133, 100, 75]
z = [927,870,567,271,132,47,92,79,99,123]

# 函数剩余部分
r = 200
a = 0.75 
x_est = [z[0]]
p_est = [1]
g_est = [0]
x_hat = z[0]
p = 1 # 不能为0 

for i in range(len(k)-1):
    # 初始化
    x_hat = a*x_hat
    p = a*p*a 

    # 预测
    g = p/(p+r) # 添加噪声预测
    x_hat = x_hat + g*(z[i] - x_hat)
    p = (1-g)*p 

    # 更新
    p_est.append(p)
    x_est.append(x_hat)
    g_est.append(g)

plt.plot(k,x,'b', label = 'true state') 
plt.plot(k,z,'r', label = 'observation')
plt.plot(k, x_est, 'g', label = 'estimate')
plt.legend()
plt.show()

使用的数据:0-30增量对应的三组数值,范围在0-1000之间。


解决方案

1. 修复数据反转方式

你用insert(0, k)逐个插入元素反转列表,不仅效率低,还可能因操作失误导致数据长度或顺序异常。改用Python列表切片反转:

ideal2r = ideal2[::-1]
actual2r = actual2[::-1]
measured2r = measured2[::-1]

2. 正确设置Y轴范围

强制设置Y轴范围时,要放在所有plot调用之后,确保覆盖自动计算的轴范围:

plt.plot(incs,ideal2r,'b', label = 'ideal')
plt.plot(incs,actual2r,'r', label = 'actual')
plt.ylim(0, 1000)  # 所有绘图完成后再设置
plt.legend()
plt.show()

3. 检查数据长度匹配

确认incs的长度和反转后的ideal2r/actual2r等数据列表长度完全一致。如果长度不匹配,会导致绘图数据错位,看起来像Y轴堆叠。可以打印长度验证:

print(len(incs), len(ideal2r), len(actual2r))

4. 排查数据范围

如果以上方法无效,打印数据前几个元素确认范围是否符合预期:

print("ideal前5个值:", ideal2r[:5])
print("actual前5个值:", actual2r[:5])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:45:56