Matplotlib绘图Y轴数值无序问题咨询(附代码与CSV数据)
解决Matplotlib绘图Y轴数值无序的问题
我帮你找到了两个关键问题,咱们一步步来修复:
核心问题:数据类型错误
你从CSV中读取的solar列数据是字符串类型,而非数值类型。Matplotlib处理字符串数据时,会默认将其视为分类变量,Y轴会按字符串的字典序排列,而非数值大小,这就是Y轴无序的根本原因。
次要问题:坐标轴对象未定义
原代码中直接调用ax.plot_date,但ax对象并未创建或获取,运行时会抛出NameError。
修正后的完整代码
# -*- coding: UTF-8 -*- import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime import numpy as np # 用with语句安全读取文件,避免资源泄漏 with open(r'D:\Users\a0476\Anaconda3\TickData\PV5sdata1.csv', 'r') as f: I020 = [line.strip('\n').split(",") for line in f][1:] # 跳过表头 # 处理时间数据 Time = [datetime.datetime.strptime(line[0], "%H%M%S%f") for line in I020] Time1 = [mdates.date2num(line) for line in Time] # 关键改动:将solar数据转为浮点型数值 Solar = [float(line[1]) for line in I020] # 按时间排序数据 order = np.argsort(Time1) xs = np.array(Time1)[order] ys = np.array(Solar)[order] # 创建/获取坐标轴对象 fig, ax = plt.subplots() ax.set_title('Solar data') ax.set_xlabel('Time') ax.set_ylabel('Solar') # 绘制折线图 ax.plot_date(xs, ys, 'k-') # 设置X轴时间格式 hfmt = mdates.DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(hfmt) plt.show()
改动说明
- 数据类型转换:将
Solar列表的元素从字符串转为float类型,确保Matplotlib将其识别为数值数据,Y轴会按数值大小正常排序。 - 坐标轴对象创建:使用
fig, ax = plt.subplots()创建画布和坐标轴对象,替代原代码中未定义的ax,避免报错。 - 文件读取优化:用
with语句读取文件,确保文件自动关闭,更安全规范。
运行修正后的代码,Y轴就会按照solar数值的大小有序显示了。
内容的提问来源于stack exchange,提问作者林意專
相关产品推荐
相关产品推荐

