Matplotlib y 轴值未排序 [英] Matplotlib y axis values are not ordered
本文介绍了Matplotlib y 轴值未排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 matplotlib 进行绘图.该图显示了 Y 轴未排序的问题.
I am trying to plot using matplotlib. The plot showed a problem that the Y axis is not ordered.
这是代码.
# -*- 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
推荐答案
发生这种情况的原因是您的数据被绘制为字符串.
The reason this happens is because your data is being plotted as strings.
解决方案是将 y 轴数据转换为浮点数.这可以通过简单地转换为列表理解中的浮点数来完成:
The solution is to convert your y axis data to floats. This can be done by simply casting to a float in your list comprehension:
Solar = [float(line[1]) for line in I020]
我还建议在使用日期/时间时使用 matplotlib 的 x 轴自动格式化.这将旋转标签等以使图表看起来更好:
I would also suggest to use matplotlib's auto formatting of the x -axis when using dates/times. This will rotate the labels etc to make the graph look better:
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()
给出:
这篇关于Matplotlib y 轴值未排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文