11

下面用 Python 编写的代码将数据从 Excel 导入 Python,然后使用 matplotlib 绘图。我正在尝试使用该函数在第 80 行上方和下方填充不同的颜色fill_between,但它给出了

ValueError: Argument dimensions are incompatible

注意: Excel 文件 ( 'eegg.xlsx') 有 4 列 682 行,包含int数据 (0-100)。

我认为问题where出在调用的参数上fill_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([])
4

3 回答 3

15

您会收到此错误,因为Y1is a list,而不是 an numpy.array,因此(Y1) > 80(Y1) < 80返回一个bool每个,而不是它们的数组,因为 kwargwhere接受。

所以更换线路

Y1 = att

Y1 = array(att)

应该解决问题。

于 2013-08-19T13:45:45.237 回答
4

确保将 X 和 Y1 转换为 pandas.core.series.Series。那应该可以解决问题。您可以通过以下方式检查类型:

type(X)
type(Y1)

如果两者都返回“pandas.core.series.Series”,那么它应该可以工作。

只是为了说明,如果 X,Y 是数据帧,那么请尝试以下操作:

X = X.iloc[:,0]  # NEW
Y = Y.iloc[:,0]  # NEW
于 2018-01-15T21:24:58.463 回答
2

似乎参数 color 和 alpha 需要作为 color =...,alpha=... 传递

正确:ax.fill_between(x, y_min, y_max,color = color, alpha=0.1)

错误:ax.fill_between(x, y_min, y_max,color, alpha=0.1)

于 2017-06-20T08:27:01.783 回答