2016-07-28 72 views
3

我正在使用matplotlib和pyplot從CSV文件創建一些圖。我可以創建線圖沒有問題,但創建條形圖時遇到了很多麻煩。使用日期時間創建條形圖

我提到這個帖子matplotlib bar chart with dates其他幾個似乎他們應該很容易完成我的任務,但我不能讓它與我的日期時間列表一起工作。

運行從上面的帖子確切的代碼生成預期的圖表,但是當我換我們自己的X和Y值我自己從我的CSV文件:

import matplotlib.pyplot as plt 
import matplotlib 
import numpy as np 
from datetime import datetime 
import csv 


columns="YEAR,MONTH,DAY,HOUR,PREC,PET,Q,UZTWC,UZFWC,LZTWC,LZFPC,LZFSC,ADIMC,AET" 

data_file="FFANA_000.csv" 

list_of_datetimes = [] 
skipped_header = False 
with open(data_file, 'rt') as f: 
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE) 
    for row in reader: 
     if skipped_header: 
      date_string = "%s/%s/%s %s" % (row[0].strip(), row[1].strip(), row[2].strip(), row[3].strip()) 
      dt = datetime.strptime(date_string, "%Y/%m/%d %H") 
      list_of_datetimes.append(dt) 
     skipped_header = True   


UZTWC = np.genfromtxt(data_file, delimiter=',', names=columns, usecols=("UZTWC")) 

x = list_of_datetimes 
y = UZTWC 

ax = plt.subplot(111) 
ax.bar(x, y, width=10) 
ax.xaxis_date() 

plt.show() 

運行此給出了錯誤:

Traceback (most recent call last): 
File "graph.py", line 151, in <module> 
ax.bar(x, y, width=10) 
File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\__init__.py", line 1812, in inner 
return func(ax, *args, **kwargs) 
File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_axes.py", line 2118, in bar 
if h < 0: 
TypeError: unorderable types: numpy.ndarray() < int() 

當我運行的日期時間numpy的轉換所必需的繪製我的折線圖:

list_of_datetimes = matplotlib.dates.date2num(list_of_datetimes) 

我得到同樣的錯誤。

任何人都可以提供一些見解?從FFANA_000.csv

摘錄:

%YEAR,MO,DAY,HR,PREC(MM/DT),ET(MM/DT),Q(CMS), UZTWC(MM),UZFWC(MM),LZTWC(MM),LZFPC(MM),LZFSC(MM),ADIMC(MM), ET(MM/DT) 
2012, 5, 1, 0,  0.000,  1.250,  0.003,  2.928,  0.000,  3.335,  4.806,  0.000,  6.669,  1.042 
2012, 5, 1, 6,  0.000,  1.250,  0.003,  2.449,  0.000,  3.156,  4.798,  0.000,  6.312,  0.987 
2012, 5, 1, 12,  0.000,  1.250,  0.003,  2.048,  0.000,  2.970,  4.789,  0.000,  5.940,  0.929 
2012, 5, 1, 18,  0.000,  1.250,  0.003,  1.713,  0.000,  2.782,  4.781,  0.000,  5.564,  0.869 
2012, 5, 2, 0,  0.000,  1.250,  0.003,  1.433,  0.000,  2.596,  4.772,  0.000,  5.192,  0.809 
2012, 5, 2, 6,  0.000,  1.250,  0.003,  1.199,  0.000,  2.414,  4.764,  0.000,  4.829,  0.750 
2012, 5, 2, 12,  0.000,  1.250,  0.003,  1.003,  0.000,  2.239,  4.756,  0.000,  4.478,  0.693 
2012, 5, 2, 18,  0.000,  1.250,  0.003,  0.839,  0.000,  2.072,  4.747,  0.000,  4.144,  0.638 
2012, 5, 3, 0,  0.000,  1.250,  0.003,  0.702,  
+0

你可以從你的文件中提供一些示例行嗎? –

+1

@MaximilianPeters編輯原始問題 –

回答

0

我不能完全與您的數據和代碼重現您的問題。我得到

> UZTWC = np.genfromtxt(data_file, delimiter=';', names=columns, 
> usecols=("UZTWC")) File 
> "C:\Python34-64bit\lib\site-packages\numpy\lib\npyio.py", line 1870, 
> in genfromtxt 
>  output = np.array(data, dtype) ValueError: could not convert string to float: b'UZTWC(MM)' 

但嘗試改變UZTWC = np.genfromtxt(...)

UZTWC = np.genfromtxt(data_file, delimiter=',', usecols=(7), skip_header=1) 

,你應該得到的圖表。問題是,由於某種原因你的numpy數組是由字符串而不是浮動。