AssertionError: Inkompatible Größen: Argument 'height' muss Länge 2 oder skalar sein (Matplotlib, Python 2.7, Zeichnen von Diagrammen)

Ein neuer Tag brachte leider ein neues Problem mit Python: /

Ich habe eine Datei von meiner anderen App in Java geschrieben. Diese App generiert Dateien mit einigen Daten, es ist ein Zufallskram, weil ich nicht sagen kann, wie viele Zeilen jede Datei haben würde. Die Beispieldatei sieht folgendermaßen aus:

3   Sat Jan 21 00:00:00 2012
7   Sun Mar 11 00:00:00 2012
5   Fri Jan  1 00:00:00 2010
4   Sat Feb  5 00:00:00 2011
8   Sun Apr 11 00:00:00 2010
4   Wed Aug 24 00:00:00 2011
8   Sat Feb 20 00:00:00 2010
3   Thu Oct 13 00:00:00 2011
9   Fri Dec 17 00:00:00 2010
4   Tue Jul 20 00:00:00 2010
8   Fri Dec  2 00:00:00 2011
6   Mon May 31 00:00:00 2010
5   Mon May 16 00:00:00 2011
8   Mon Apr 30 00:00:00 2012
3   Thu Oct 28 00:00:00 2010
1   Tue Jun 19 00:00:00 2012
7   Wed Sep  8 00:00:00 2010

Und ich möchte mit diesen Daten ein Diagramm zeichnen. Auf der X-Achse möchte ich Datumsangaben und auf der Y-Achse Zahlen aus der ersten Spalte meiner Datei formatieren lassen. Hier ist mein schöner Python-Code:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import wx
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as pl
import datetime

def monthNum(month) :
        if month == "Jan" :
            return 1
        elif month == "Feb" :
            return 2
        elif month == "Mar" :
            return 3
        elif month == "Apr" :
            return 4
        elif month == "May" :
            return 5
        elif month == "Jun" :
            return 6
        elif month == "Jul" :
            return 7
        elif month == "Aug" :
            return 8
        elif month == "Sep" :
            return 9
        elif month == "Oct" :
            return 10
        elif month == "Nov" :
            return 11
        elif month == "Dec" :
            return 12

def convertDate(dateTime) :
        line = dateTime.split(' ')
        date = (str(line[2]) + "-" + str(monthNum(line[1])) + "-" + str(line[4]))
        return date

def readFile(filename) :
        values = []
        dates = []
        try :
                with open(filename, "r") as openedFile:
                        for line in openedFile :
                                line = line.strip()
                                data = line.split("\t")
                                values.append(int(data[0]))
                                newDate = convertDate(data[1])
                                dates.append(datetime.datetime.strptime(newDate, "%d-%m-%Y").date())
        except IOError :
                print("IOERROR")
        except ValueError :
                print("VALUE ERROR")
        if len(values) != 0 and len(dates) != 0 :
                drawChart(values, dates, filename)

def drawChart(values, dates, filename):
        fig = pl.figure(dpi=60,figsize=(18, 10))
        ax = fig.add_subplot(1,1,1)
        fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.2)
        ax.bar(range(len(dates)), values, facecolor='#777777', align='center', width=0.5, ecolor='black')
        pl.axis('tight')
        ax.set_xticks(range(len(dates)))
        pl.yticks(values)
        ax.set_xticklabels(dates, rotation = 90)
        pl.savefig(filename + ".png")
        pl.show()
        pl.close()

readFile("file.txt")

Alles ist gut, wennfile.txt hatte eine einzige Reihe. Wenn es mehr Zeilen hat, gibt mir Python-Code einen Fehler:

VALUE ERROR
Traceback (most recent call last):
  File "test.py", line 71, in <module>
    readFile("file.txt")
  File "test.py", line 56, in readFile
    drawChart(values, dates, filename)
  File "test.py", line 62, in drawChart
    ax.bar(range(len(dates)), values, facecolor='#777777', align='center', width=0.5, ecolor='black')
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 4733, in bar
    nbars)
AssertionError: incompatible sizes: argument 'height' must be length 2 or scalar

Und ich weiß nicht wirklich, wie ich das beheben soll. Es ist in Ordnung, wennfile.txt hatte eine zeile aber wie ich vorher schrieb: ich kann nicht sagen wie viele zeilen das wärenfile.txt habe (es hängt von meiner Java App ab).

Irgendjemand? Ich benutze Python 2.7 und Matplotlib auf Kubuntu 12.04.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage