2016-07-28 63 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数组是由字符串而不是浮动。