尝试绘制一个迭代,但是plt.地块是空的


a = frame_query("select ....",db)

在我的代码中,var 'c'是一个numpy。我要画的narray。然而,当我执行下面的代码,我得到一个空的情节!

for i in a.values:
    c = (i[:1]-a.values[-1:])/a.values[-1:]*100
    plt.plot(c)
plt.show()
print c

给:

[[ 28.57142857]]
[[ 27.27272727]]
[[ 27.92207792]]
[[ 28.57142857]]
[[ 22.07792208]]
[[ 22.07792208]]
[[ 22.07792208]]

我到底哪里错了?

提前感谢。

调整代码的最简单方法可能是在循环之前开始一个空列表,在循环中将c中的值附加到它上面,然后在循环之后绘制它。例如:

c_series = []
for i in a.values:
    c = (i[:1]-a.values[-1:])/a.values[-1:]*100
    c_series.append(c[0])
plt.plot(c)
plt.show()

注意在这里使用c[0]是安全的,因为上面一行的逻辑保证了ndarray只有一个成员。

然而,这是处理数据结构的一种有点奇怪的方式。由于a.values似乎是ndarray,您也可以简单地通过使用numpy提供的对数组执行算术运算的工具来做到这一点(我无法测试它,因为我没有a.values的逐字副本):

const = a.values[-1:]
c_series = (a.values - const) / const*100
plt.plot(c_series)
plt.show()

通常-当使用numpy数组时,通常最好将它们保持为数组(称为代码向量化),而不是在循环中逐个元素处理它们。

相关内容

最新更新