我有以下python代码:
def graph(seconds,now, dayold, threedayold,weekold):
x = np.arange(len(seconds))
ynow = np.array(now)
yday = np.array(dayold)
y3day = np.array(threedayold)
yweek = np.array(weekold)
# y2 should go on top, so shift them up
plt.plot(x,ynow)
plt.plot(x,yday)
plt.plot(x,y3day,'purple')
plt.plot(x,yweek)
plt.fill_between(x,ynow,yday,color='lightblue')
plt.fill_between(x,yday,y3day,color='green')
plt.fill_between(x,y3day,yweek,color='purple')
plt.fill_between(x,yweek,0,color='red')
plt.show()
从而生成以下图形:
但是,“seconds”是非连续结果的列表,我真正想要的是:
^{pr2}$这样我就能得到一个正确的X-Y图。但是,当我尝试第二段代码时,我得到了以下错误:
josephs-mbp-3$Traceback (most recent call last):
File "./temp.py", line 47, in <module>
graph(a[0],a[1],a[2],a[3],a[4])
File "./temp.py", line 41, in graph
plt.fill_between(x,yweek,0,color='red')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/pyplot.py", line 2287, in fill_between
ret = ax.fill_between(x, y1, y2, where, interpolate, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/axes.py", line 6489, in fill_between
y2 = np.ones_like(x)*y2
NotImplementedError: Not implemented for this type
有人能告诉我是什么引起的吗?我是怎么解决的?在
编辑:啊哈!我修好了,但想有人告诉我怎么。。。在
改变
plt.fill_between(x,yweek,0,color='red')
到
plt.fill_between(x,yweek,[0]* len(seconds),color='red')
产生了我想要的-我能理解为什么这会是一个问题,但我不明白为什么第一个版本是有效的。。。有什么想法吗?在
我认为seconds可能是一个数字字符串的列表,可能是从一个文件加载的,而不是一个数字类型的列表。在
matplotlib的fill_between函数需要一个数值类型的数组作为参数,否则会崩溃。这有点令人困惑,因为plot函数似乎在调用它时执行了从字符串到float的转换。在
所以我想做些类似的事情:
而不是:
^{pr2}$应该解决你的问题!在
相关问题 更多 >
编程相关推荐