2016-05-16 2 views
0

私は問題を抱えています。グラフをプロットしたい場合は初めてですが、同じオプションが再度選択された場合、以下のようなエラーが表示されます。私にとっては、パイロットが持っている資源の一部が解放されていないようです。もしそうなら、私の理解は正しいのですか?それを修正する方法は?もしそれが間違っていたら、それは何の原因になるでしょうか?pyplotを使用しているときのデータ処理

私はグラフをプロットしようとすると、ちょっとビットが増えます。データを表示したいのであれば、うまく動作します。

コード:

default_options = {'0' : 'Below are the options', 
        '1' : '1 . Enter File path\'s for processing', 
        '2' : '2 . Display all categories', 
        '3' : '3 . Display type of forms', 
        '4' : '4 . Display for given form annual result', 
        '5' : '5 . Compare two form annual result ', 
        '6' : '6 . Compare two years annual result', 
        '99': '0 . Type 0 to exit ' 
        } 

labels = ["1st_quat", "2nd_quat", "3rd_quat", "4th_quat"] 

def plotBarGraph(self, fiscal_year): 
    index = np.arange(len(labels)) 
    bar_width = 0.1 
    fig, ax = plt.subplots() 
    appli_received = [data[0] for data in fiscal_year] 
    appli_accepted = [data[1] for data in fiscal_year] 
    appli_denied = [data[2] for data in fiscal_year] 
    appli_pending = [data[3] for data in fiscal_year] 

    plt.bar(index, appli_received, bar_width, alpha = 0.5, color='b') 
    plt.bar(index + bar_width, appli_accepted,bar_width, alpha = 0.5, color='r') 
    plt.bar(index + bar_width * 2, appli_denied, bar_width, alpha = 0.5, color='g') 
    plt.bar(index + bar_width * 3, appli_pending,bar_width, alpha = 0.5, color='k') 
    plt.xticks(index, labels, rotation = 35) 
    ax.tick_params(axis='both', which='major') 
    plt.legend(['Received', 'Approved', 'Denied', 'Pending'], loc='upper left') 
    plt.show() 

def getUserInput(self): 
    self.displayUserOption() 
    user_input = int(raw_input()) 
    if self.validateUserInput(user_input): 
     if user_input: 
      self.processForAllFile(user_input) 
      self.getUserInput() 
    else: 
     print " Please enter valid option \n " 
     self.getUserInput() 

ユーザーが再びグラフにプロットしようとしたときに印刷されたエラー(私は手動で再びそれをプロットするために選択する前に、同様のプロットを閉じる)

self.plotBarGraph(report) 

    plt.bar(index, appli_received, bar_width, alpha = 0.5, color='b') 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2089, in bar 
    ret = ax.bar(left, height, width, bottom, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 4733, in bar 
    nbars) 
AssertionError: incompatible sizes: argument 'height' must be length 4 or scalar 
+0

私は 'plotBarGraph'のコードを見る必要があるようです。 – mobiusklein

+0

@mobiusklein - 要求通りにコードで質問を更新しました – oneday

答えて

0

あなたが持つかもしれように見えますグローバルであると思われるlabels変数とfiscal_yearのサイズがplotBarGraphに一致していません。変数indexのサイズは、labelsの長さによって異なります。次に、fiscal_yearを未知の次元のリストにまとめ、正確にlen(labels)バーの棒グラフの高さとしてそれらを使用しようとします。

len(labels) != len(fiscal_year)の場合、matplotlibが棒グラフを正しく描画するには高さが多すぎるか小さすぎます。これは表示されているエラーを表示している理由です。

+0

私はそれが初めて動作すると言いました。オプションを指定しても機能しなくなり、エラーがスローされます。あなたが私のコードから見ることができるように、ユーザは同じオプションを何度も選択することができるので、初めてのものは良いです.2度目はエラーになります – oneday

+0

'labels'の値が' fiscal_year'? 'labels'の値はどのように設定されますか? – mobiusklein

+0

ラベル値を更新しました。はい、グローバル変数です。申し訳ありませんが、最初に動作するかどうかを理解することができません。なぜマッピングが2度目に何をしなければならないのですか?データは変更されず、同じ要求が2度目に発生しました。 – oneday

関連する問題