2013-08-19 9 views
6

पायथन में लिखे गए कोड को एक्सेल से पायथन तक डेटा आयात करता है, फिर matplotlib के साथ प्लॉट करता है। मैं ऊपर और fill_between फ़ंक्शन का उपयोग अलग अलग रंग के साथ लाइन में 80 से नीचे भरने के लिए कोशिश कर रहा हूँ, लेकिन यह देता हैfill_between देता है "ValueError: तर्क आयाम असंगत हैं"

ValueError: Argument dimensions are incompatible 

नोट: Excel फ़ाइल ('eegg.xlsx') 682 पंक्तियों के साथ 4 स्तंभ int डेटा है और होता है (0-100)।

मुझे लगता है कि समस्या wherefill_between कॉल के तर्क के साथ है, लेकिन मैं इसे हल नहीं कर सकता।

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' के आकार मुद्रित कर सकते हैं? 'प्रिंट X.shape, Y1.shape' करें। –

+0

हालांकि यह जानने के लिए कि किस प्रकार की त्रुटि उठाई जा रही है, समस्या को हल करने में हमारी सहायता कर सकती है, अगर आप ** पूर्ण ट्रेसबैक ** पोस्ट करते हैं तो यह _much_ आसान होगा, क्योंकि यह हमें बताता है कि _where_ त्रुटि उठाई गई है। – hooy

उत्तर

10

आप क्योंकि Y1 एक list, न कि एक numpy.array, और इसलिए (Y1) > 80 है और (Y1) < 80 एक भी bool प्रत्येक, उनमें से नहीं एक सरणी लौटने के लिए, kwarg where स्वीकार करता है के रूप में इस त्रुटि मिलती है।

तो

Y1 = array(att) 

के साथ लाइन

Y1 = att 

की जगह समस्या को हल करना चाहिए।

1

ऐसा लगता है कि तर्क रंग और अल्फा रंग = ..., अल्फा = ...

सही रूप में पारित करने की आवश्यकता: ax.fill_between (एक्स, y_min, y_max, रंग = रंग, अल्फा = 0.1)

गलत: ax.fill_between (एक्स, y_min, y_max, रंग, अल्फा = 0.1)

0

pandas.core.series.Series को एक्स और Y1 कन्वर्ट करने के लिए सुनिश्चित करें। इससे समस्या का समाधान होना चाहिए। आप इस प्रकार की जांच कर सकते हैं:

type(X) 
type(Y1) 

यदि दोनों "pandas.core.series.Series" लौटाते हैं तो इसे काम करना चाहिए।

बस उदाहरण के लिए, अगर पहला, दूसरा dataframes हैं, तो कोशिश निम्नलिखित:

X = X.iloc[:,0] # NEW 
Y = Y.iloc[:,0] # NEW 
संबंधित मुद्दे