尝试绘制迭代,但plt.plot为空

时间:2015-06-02 12:59:02

标签: python for-loop matplotlib

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

使用我的代码,var'c'是一个我想绘制的numpy.ndarray。但是,当我执行以下代码时,我得到一个空图!

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]]

我到底哪里错了?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

调整代码的最简单方法可能是在循环之前启动一个空列表,在循环中将值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.valuesndarray,你也可以通过使用numpy提供的工具来对数组执行算术运算(我无法测试它,因为我没有您a.values)的逐字副本:

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

一般情况下 - 使用numpy数组时,通常最好将它们保存为数组(称为矢量化代码),而不是在循环中逐个元素处理它们。