林意專*_*林意專 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)
这使:
归档时间: |
|
查看次数: |
13044 次 |
最近记录: |