簡體   English   中英

使用Matplotlib可視化CSV數據

[英]Using Matplotlib, visualize CSV data

使用matplotlib / pandas / python,我無法將數據可視化為每30分鍾和每天的值 ,這是一個新問題,與該問題密切相關。

我想用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

您的資料

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()

產量 在此處輸入圖片說明

我不知道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的更優雅的解決方案,我相信有人會知道更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM