2012-08-22 12 views
9

新しい一日は、Pythonで新しい問題をもたらした、残念ながら:/てAssertionError:互換性のないサイズ:引数「高さは」(グラフを描く、matplotlibの、Pythonの2.7)、長さ2またはスカラーでなければなりません

私は自分で生成されたファイルを持っていますJavaで書かれた他のアプリ。このアプリは、いくつかのデータを含むファイルを生成します。ランダムなものです。なぜなら、各ファイルの行数を指定できないからです。例ファイルは次のようになります。

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 

このデータを使用してグラフを描画します。 X軸では、フォーマットされた日付と、ファイルの最初の列からのY軸番号が必要です。相続人は私の素敵なPythonコード:file.txtは1、単一の行を持っていた場合

# -*- 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") 

すべてが、大丈夫です。行数が増えると、Pythonコードでエラーが発生します。

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 

そして、私はそれを修正する方法を本当に知りません。そのfile.txtには1行しかなかったのですが、以前書いたとおりです。file.txtの行数は(Javaアプリケーションによって異なります)

誰か?私はKubuntu 12.04でPython 2.7とMatplotlibを使用しています。

+0

何を変数 'values'には何が入っていますか? – Sheena

+0

@Sheena:それは私のファイルの最初の列からの数字のリストを含んでいます – Katie

答えて

12

日付には2つの値しかないためです。 matplotlibが何をすべきかを知るには、日付の長さと値の長さが同じでなければなりません。値がスカラーだった場合、すべてのバーが同じ高さに、私はそれを考え出したと思う

1

感謝を持っているでしょう - 問題はreadFileの(引数)機能していました、それは次のようになります。

def readFile(filename) : 
    values = [] 
    dates = [] 
    openedFile = open(filename, "r") 
    content = openedFile.readlines() 
    openedFile.close() 
    for line in content : 
     line = line.strip() 
     data = line.split("\t") 
     values.append(int(data[0])) 
     newDate = self.convertDate(data[1]) 
     dates.append(newDate) 
    print(values) 
    print(dates) 
関連する問題