2013-08-19 4 views
6

Der folgende Code in Python importiert Daten aus Excel nach Python und plottet dann mit matplotlib. Ich versuche, über und unter der Leitung 80 mit verschiedenen Farben der fill_between Funktion zu füllen, aber es gibtfill_between gibt "ValueError: Argumentdimensionen sind inkompatibel"

ValueError: Argument dimensions are incompatible 

Hinweis: die Excel-Datei ('eegg.xlsx') hat vier Spalten mit 682 Zeilen und enthält int Daten (0-100).

Ich denke, das Problem ist mit dem where Argument der fill_between Anrufe, aber ich kann das nicht lösen.

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

können Sie aus den Formen von 'X' drucken und 'Y1'? Drücken Sie 'X.Shape, Y1.shape'. –

+0

Auch wenn Sie wissen, welche Art von Fehler ausgelöst wird, könnten wir das Problem möglicherweise lösen, es wäre _much_ einfacher, wenn Sie das ** vollständige Traceback ** posten, da dies uns mitteilt, wo der Fehler auftritt. – hooy

Antwort

10

Sie erhalten diesen Fehler, da Y1 ein list ist, kein numpy.array, und deshalb (Y1) > 80 und (Y1) < 80 eine einzige bool jeder Rückkehr, nicht eine Reihe von ihnen, wie die kwarg where akzeptiert.

ersetzt also die Linie

Y1 = att 

mit

Y1 = array(att) 

sollte das Problem lösen.

1

Es scheint, dass Argumente Farbe und Alpha weitergegeben werden müssen, wie color = ..., alpha = ...

Richtig: ax.fill_between (x, y_min, y_max, color = Farbe, alpha = 0,1

)

falsch: ax.fill_between (x, y_min, y_max, Farbe, alpha = 0,1)

0

Stellen Sie sicher, x und Y1 bis pandas.core.series.Series zu konvertieren. Das sollte das Problem lösen. Sie können den Typ überprüfen:

type(X) 
type(Y1) 

Wenn beide return „pandas.core.series.Series“ dann sollte es funktionieren.

Nur zur Veranschaulichung, wenn X, Y Datenrahmen sind, dann versuchen Sie folgendes:

X = X.iloc[:,0] # NEW 
Y = Y.iloc[:,0] # NEW 
Verwandte Themen