Matplotlib y轴值未排序

林意專*_*林意專 11 python plot matplotlib

我正在尝试使用matplotlib绘图.该图显示了Y轴未排序的问题.

这是代码.

# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import numpy as np
I020 = [ line.strip('\n').split(",") for line in 
open(r'D:\Users\a0476\Anaconda3\TickData\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 = [ 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()
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Dav*_*idG 33

发生这种情况的原因是因为您的数据被绘制为字符串.

解决方案是将您的y轴数据转换为浮点数.这可以通过简单地转换为列表推导中的浮点数来完成:

Solar = [float(line[1]) for line in I020]
Run Code Online (Sandbox Code Playgroud)

我还建议在使用日期/时间时使用matplotlib自动格式化x轴.这将旋转标签等以使图形看起来更好:

plt.gcf().autofmt_xdate()
Run Code Online (Sandbox Code Playgroud)

你的例子变成:

I020 = [ line.strip('\n').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()
Run Code Online (Sandbox Code Playgroud)

这使:

在此输入图像描述

  • 答对了!“发生这种情况的原因是因为你的数据被绘制为字符串。”这句话拯救了这一天..谢谢@DavidG (6认同)
  • 非常感谢你!!它现在正在工作. (3认同)