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

使用Python Matplotlib绘图时Y轴刻度不可见且数值不匹配的问题排查

问题分析与解决方案:Matplotlib Y轴刻度异常&数值显示错误

你遇到的两个问题——Y轴刻度不可见、实际值28被显示为0,根源都在数据类型处理和轴配置细节上,咱们拆解来看:

核心问题排查

1. 温度数据是字符串类型,而非数值

你的代码中Temperature.append(column[1])直接将CSV里的温度值以字符串形式存入列表,Matplotlib无法将字符串正确解析为数值进行绘图,导致原本的28被错误识别为非数值数据,最终显示为0。

2. Y轴刻度配置的疏漏

虽然你设置了ax.set_yticks(np.arange(0, 100, 20)),但没有显式指定刻度标签,再加上可能的图表布局问题,导致刻度被边缘截断而不可见;另外,time.strftime(column[0])的用法有误——strftime需要传入时间元组/struct_time对象,直接传字符串会触发错误,应该先解析再格式化。

修正后的完整代码

#-*-coding:utf-8 -*- 
import csv 
import time 
import numpy as np 
import matplotlib.pyplot as plt 

Time = []
Temperature = []

# 可选:设置图表尺寸,避免元素拥挤
plt.figure(figsize=(10, 6))

with open('Temperature.csv', 'r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    header_row = next(plots)
    for column in plots:
        # 解析CSV中的时间字符串(请根据你的实际时间格式调整%Y-%m-%d %H:%M)
        time_struct = time.strptime(column[0], "%Y-%m-%d %H:%M")
        # 格式化时间后存入列表,按需调整显示格式
        Time.append(time.strftime("%Y-%m-%d %H:%M", time_struct))
        # 将温度值转换为float类型,确保Matplotlib能识别为数值
        Temperature.append(float(column[1]))

ax = plt.gca()
ax.set_ylim(0, 100)
ax.set_yticks(np.arange(0, 100, 20))
# 显式设置Y轴刻度标签,确保刻度可见
ax.set_yticklabels(np.arange(0, 100, 20))

plt.plot(Time, Temperature, linewidth=5)
# 可选:旋转X轴标签,避免文字重叠
plt.xticks(rotation=45)
plt.xlabel("Time")
plt.ylabel("Temperature")
plt.title("Temperature Trend")
# 自动调整布局,防止标签、刻度被截断
plt.tight_layout()
plt.show()

关键修正说明

  • 数据类型转换:将column[1]转为float,让Matplotlib能正确处理数值数据,解决28显示为0的问题。
  • 时间处理修复:用strptime解析CSV中的时间字符串为时间结构,再用strftime格式化显示,避免时间处理报错。
  • 刻度可见性优化:添加ax.set_yticklabels显式定义Y轴刻度标签,配合plt.tight_layout()自动调整布局,防止刻度被图表边缘遮挡。
  • 可读性优化:设置图表尺寸、旋转X轴标签,提升图表的可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:24:46