如何修正Matplotlib图表刻度精度,避免刻度从19突变到100?
问题原因与解决方法
核心问题
你读取的JSON数据里,temps和pressure的元素都是字符串类型,而非数值类型。Matplotlib处理字符串数据时会把它们当作离散类别,而非连续数值,这直接导致Y轴刻度异常;当你强行设置ylim时,字符串无法被正确映射到数值区间,所以所有数据都被压到接近0的位置。
解决步骤
- 转换数据类型:将字符串列表转为浮点型数值列表,让Matplotlib能正确识别数值大小。
- 优化图表展示:由于温度和压力的数值范围差距较大(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
相关产品推荐
相关产品推荐

