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

如何修正Matplotlib图表刻度精度,避免刻度从19突变到100?

问题原因与解决方法

核心问题

你读取的JSON数据里,temps和pressure的元素都是字符串类型,而非数值类型。Matplotlib处理字符串数据时会把它们当作离散类别,而非连续数值,这直接导致Y轴刻度异常;当你强行设置ylim时,字符串无法被正确映射到数值区间,所以所有数据都被压到接近0的位置。

解决步骤

  1. 转换数据类型:将字符串列表转为浮点型数值列表,让Matplotlib能正确识别数值大小。
  2. 优化图表展示:由于温度和压力的数值范围差距较大(19 vs 98),单Y轴会导致其中一组数据的变化被掩盖,建议使用双Y轴分别展示两组数据。

修改后的双Y轴代码

import json
import matplotlib.pyplot as plt
import numpy as np

# 读取数据并转换为数值类型
dataFile = json.load(open("Data.json", "r"))
temps = [float(t) for t in dataFile["temps"]]
pressures = [float(p) for p in dataFile["pressure"]]
time = np.arange(len(temps))

figure = plt.figure()
ax1 = figure.add_subplot(111)

# 左Y轴绘制温度曲线
line1, = ax1.plot(time, temps, color='tab:red', label='温度')
ax1.set_ylabel('温度(℃)')
ax1.tick_params(axis='y', labelcolor='tab:red')

# 创建右Y轴绘制压力曲线
ax2 = ax1.twinx()
line2, = ax2.plot(time, pressures, color='tab:blue', label='压力')
ax2.set_ylabel('压力(kPa)')
ax2.tick_params(axis='y', labelcolor='tab:blue')

# 合并图例
lines = [line1, line2]
ax1.legend(lines, [l.get_label() for l in lines])

plt.show()

单Y轴备选方案(仅需转换数据类型)

如果坚持用单Y轴,只需完成数据类型转换,Matplotlib会自动适配合理的Y轴刻度:

import json
import matplotlib.pyplot as plt
import numpy as np

dataFile = json.load(open("Data.json", "r"))
temps = [float(t) for t in dataFile["temps"]]
pressures = [float(p) for p in dataFile["pressure"]]
time = np.arange(len(temps))

figure = plt.figure()
ax = figure.add_subplot(111)
ax.plot(time, temps, label='温度')
ax.plot(time, pressures, label='压力')
ax.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:20:29