2016-07-28 13 views
3

Ich verwende Matplotlib und Pyplot, um einige Grafiken aus einer CSV-Datei zu erstellen. Ich kann Liniendiagramme erstellen, kein Problem, aber ich habe viel Mühe beim Erstellen eines Balkendiagramms.Erstellen Sie ein Balkendiagramm mit Datumsangaben

Ich bezog mich auf diesen Pfosten matplotlib bar chart with dates unter einigen anderen, die schienen, wie sie meine Aufgabe leicht erreichen sollten, aber ich kann es nicht mit meiner Liste der Datumtimes arbeiten lassen.

den genauen Code aus dem obigen Beitrag Laufen erzeugt die erwartete Graph, aber wenn ich unseren ihren x- und y-Wert für meine eigenen aus meiner CSV-Datei austauschen:

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

Lauf dies gibt den Fehler:

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

Wenn ich ausführen, um die Datetime numpy-Konvertierung, die zum Plotten meiner Liniendiagramme notwendig ist:

list_of_datetimes = matplotlib.dates.date2num(list_of_datetimes) 

Ich bekomme den gleichen Fehler.

Kann jemand Einblick geben?

Auszug aus 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

Können Sie einige Beispielzeilen aus Ihrer Datei angeben? –

+1

@MaximilianPeters Bearbeitete ursprüngliche Frage –

Antwort

0

Ich konnte nicht vollständig Ihr Problem mit Ihren Daten und Code reproduzieren. Ich bekomme

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

Aber versuchen UZTWC = np.genfromtxt(...) zu

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

ändert und Sie sollten einen Graphen erhalten. Das Problem ist, dass Ihr numpy Array aus irgendeinem Grund aus Strings und nicht aus Floats besteht.

Verwandte Themen