Using matplotlib/pandas/python, I cannot visualize data as values per 30mins and per days是一个新问题,与此问题密切相关。
我想用Matplotlib可视化CSV数据。
以下是我的代码1.30mins.py
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np
style.use('ggplot')
x,y =np.loadtxt('total_watt.csv',
unpack = True,
delimiter = ',')
plt.plot(x,y)
plt.title('Example')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
当我实现1.30mins.py
时,我收到以下错误消息。
(DataVizProj)Soma-Suzuki:Soma Suzuki$ python 1.30mins.py
Traceback (most recent call last):
File "1.30mins.py", line 10, in <module>
delimiter = ',')
File "/Users/Suzuki/Envs/DataVizProj/lib/python2.7/site-packages/numpy/lib/npyio.py", line 856, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: invalid literal for float(): 2011-04-18 13:22:00
这是我的total_watt.csv
2011-04-18 21:22:00 659.670303375527
2011-04-18 21:52:00 576.304871428571
2011-04-18 22:22:00 2,497.20620579196
2011-04-18 22:52:00 2,790.20392088608
2011-04-18 23:22:00 1,092.20906629318
2011-04-18 23:52:00 825.994417375886
2011-04-19 00:22:00 2,397.16672089666
2011-04-19 00:52:00 1,411.66659265233
就我自己搜索而言,我需要在我的程序中添加converters
或%y-%m-%t
。
我的python版本是2.76 我的matpltlib版本是1.42
答案 0 :(得分:2)
您的数据
2011-04-18 21:22:00 659.670303375527
2011-04-18 21:52:00 576.304871428571
...
不以空格或逗号分隔。可以认为它具有固定宽度
然而,列。 np.genfromtxt
可以读取固定宽度的数据。而不是通过
字符串到delimiter
,传递一系列表示每个的宽度的整数
字段。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib import style
style.use('ggplot')
x, y = np.genfromtxt('total_watt.csv',
unpack=True,
delimiter=[19, 10**6], dtype=None)
x = mdates.datestr2num(x)
y = np.array(np.char.replace(y, ',', ''), dtype=float)
fig, ax = plt.subplots()
ax.plot(x, y)
plt.title('Example')
plt.ylabel('Y axis')
plt.xlabel('X axis')
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
fig.autofmt_xdate()
plt.show()
的产率
答案 1 :(得分:0)
我不知道numpy是否具有直接读取datetime对象的功能。但是,如果您不是在寻找一个优雅的解决方案,那么可以使用其他两个模块csv和datetime来执行您想要的快速而脏的代码。
我使用'sample.csv'文件(注意我放置了逗号的位置):
2011-04-18 21:22:00, 659.670303375527
2011-04-18 21:52:00, 576.304871428571
代码是
from matplotlib import style
from matplotlib import pylab as plt
import numpy as np
style.use('ggplot')
filename='sample.csv'
date=[]
number=[]
import csv
with open(filename, 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='|')
for row in csvreader:
if len(row) ==2 :
date.append(row[0])
number.append(row[1])
number=np.array(number)
import datetime
for ii in range(len(date)):
date[ii]=datetime.datetime.strptime(date[ii], '%Y-%m-%d %H:%M:%S')
plt.plot(date,number)
plt.title('Example')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
给我以下图表。
如果您正在寻找使用numpy的更优雅的解决方案,我相信有人会知道更好的方法。