Matplotlib y 轴值未排序[重复]
- 2025-01-21 09:02:00
- admin 原创
- 99
问题描述:
我正在尝试使用 matplotlib 进行绘图。绘图显示 Y 轴无序的问题。
这是代码。
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import numpy as np
I020 = [ line.strip('
').split(",") for line in
open(r'D:Usersa0476Anaconda3TickDataPV5sdata1.csv')][1:]
Time = [ datetime.datetime.strptime(line[0],"%H%M%S%f") for line in I020 ]
Time1 = [ mdates.date2num(line) for line in Time ]
Solar = [ line[1] for line in I020 ]
order = np.argsort(Time1)
xs = np.array(Time1)[order]
ys = np.array(Solar)[order]
plt.title('Solar data')
plt.xlabel('Time')
plt.ylabel('Solar')
ax.plot_date(xs, ys, 'k-')
hfmt = mdates.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(hfmt)
plt.show()
CSV 数据
time solar
7000000 50.35
8000000 41.01
9000000 69.16
10000000 94.5
11000000 111.9
12000000 103
13000000 98.6
14000000 36.45
15000000 34.74
16000000 34.17
17000000 34.6
解决方案 1:
发生这种情况的原因是因为您的数据被绘制为字符串。
解决方案是将 y 轴数据转换为浮点数。只需在列表推导中将其转换为浮点数即可:
Solar = [float(line[1]) for line in I020]
我还建议在使用日期/时间时使用 matplotlib 的 x 轴自动格式化。这将旋转标签等,使图表看起来更好:
plt.gcf().autofmt_xdate()
你的例子变成:
I020 = [ line.strip('
').split(",") for line in open('PV5sdata1.csv')][1:]
Time = [datetime.datetime.strptime(line[0],"%H%M%S%f") for line in I020]
Time1 = [mdates.date2num(line) for line in Time]
Solar = [float(line[1]) for line in I020]
xs = np.array(Time1) # You don't really need to do this but I've left it in
ys = np.array(Solar)
fig, ax = plt.subplots() # using matplotlib's Object Oriented API
ax.set_title('Solar data')
ax.set_xlabel('Time')
ax.set_ylabel('Solar')
ax.plot_date(xs, ys, 'k-')
hfmt = mdates.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(hfmt)
plt.gcf().autofmt_xdate()
plt.show()
得出:
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD