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

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()

改动说明

  1. 数据类型转换:将Solar列表的元素从字符串转为float类型,确保Matplotlib将其识别为数值数据,Y轴会按数值大小正常排序。
  2. 坐标轴对象创建:使用fig, ax = plt.subplots()创建画布和坐标轴对象,替代原代码中未定义的ax,避免报错。
  3. 文件读取优化:用with语句读取文件,确保文件自动关闭,更安全规范。

运行修正后的代码,Y轴就会按照solar数值的大小有序显示了。

内容的提问来源于stack exchange,提问作者林意專

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:51:17