2013-08-19 12 views
6

Pythonで書かれた以下のコードは、ExcelからPythonにデータをインポートし、次にmatplotlibでプロットします。私は、上記とfill_between機能を使用して、異なる色のライン80の下に埋めるためにしようとしているが、それはfill_betweenは "ValueError:引数の次元は互換性がありません"

ValueError: Argument dimensions are incompatible 

注与える: Excelファイル('eegg.xlsx'は)(682行と4列があり、intデータが含まれています0-100)。

fill_betweenコールのwhere引数が問題だと思いますが、これを解決できません。

import xlrd 
import numpy 
from datetime import time 
from pylab import * 

workbook = xlrd.open_workbook('eegg.xlsx') 
worksheet = workbook.sheet_by_name('Sayfa1') 
num_rows = worksheet.nrows - 1 
num_cells = worksheet.ncols - 1 
curr_row = -1 

att=[] 
med=[] 
for i in [2,3]: 
    kolon = worksheet.col(i) 
    for x in kolon[1:]: 
     d= int(x.value) 
     if i==2: 
      att.append(d) 
     elif i==3: 
      med.append(d) 

n = len(att) 
X = np.linspace(0,n,n,endpoint=True) 
Y1 = att 
plot(X, Y1, color='blue', alpha=1.00) 
fill_between(X, 0, Y1, (Y1) > 80, color='red', alpha=.25) 
fill_between(X, 0, Y1, (Y1) < 80, color='blue', alpha=.25) 
xlim(0,n), xticks([]) 
ylim(0,110), yticks([]) 
+1

あなたは 'X'と 'Y1'の形状をプリントアウトすることができますか? 'print X.shape、Y1.shape'を実行します。 –

+0

エラーの種類がわかっていれば問題を解決するのに役立つかもしれませんが、**完全なトレースバック**を投稿すると、エラーが発生する可能性が高くなります。 – hooy

答えて

10

Y1がkwarg whereが受け入れるようlist、ないnumpy.array、したがって(Y1) > 80(Y1) < 80は、それらの配列、単一boolそれぞれのないリターンですので、あなたは、このエラーが発生します。

だから問題を解決する必要があります

Y1 = array(att) 

でライン

Y1 = att 

を交換します。

1

引数の色とアルファは色= ...、アルファ= ...

正しいと渡される必要があると思われる:ax.fill_between(X、y_min、y_maxを、色=色、アルファ= 0.1 )

誤:ax.fill_between(X、y_min、y_maxを、色、アルファ= 0.1)

0

pandas.core.series.SeriesにXとY1を変換してください。それは問題を解決するはずです。タイプを確認するには、

type(X) 
type(Y1) 

"pandas.core.series.Series"が返されます。 X、Yがデータフレームである場合に

ただ、説明のために、次を試してみてください。

X = X.iloc[:,0] # NEW 
Y = Y.iloc[:,0] # NEW 
関連する問題