在python中针对一个x值绘制多个y值

时间:2015-08-31 03:39:18

标签: arrays python-2.7 matplotlib

这是我的y值:

[1.00, 
[(1.99-2.27e-17j),(0.61+9.08e-17j), (0.12-0j)], 
[(1.9+4.54e-17j), (0.61-9.081e-17j), (0.12+4.54e-17j)], 
[(1.99+4.5e-17j), (0.61-9.08e-17j), (0.12+4.54e-17j)], 
[(1.99-2.27e-17j), (0.61+9.0e-17j), (0.12-0j)], 
3.00]

这是我的x值:

array([ 0. ,  0.2,  0.4,  0.6,  0.8,  1. ])

如您所见,第一个和最后一个x值对应一个y值,其余x个值对应多个y值。那么如何将y值的实部绘制成x?

1 个答案:

答案 0 :(得分:1)

这是一个可能对您有帮助的解决方案。请注意,这不是很有效(特别是对于更大的数据集的问题),但可能会让您走上正确的轨道。主要问题是xsys之间的维度不一样。

from numpy import *
from matplotlib import pyplot as plt

ys = [1.00, 
[(1.99-2.27e-17j),(0.61+9.08e-17j), (0.12-0j)], 
[(1.9+4.54e-17j), (0.61-9.081e-17j), (0.12+4.54e-17j)], 
[(1.99+4.5e-17j), (0.61-9.08e-17j), (0.12+4.54e-17j)], 
[(1.99-2.27e-17j), (0.61+9.0e-17j), (0.12-0j)], 
3.00]

xs = array([ 0. ,  0.2,  0.4,  0.6,  0.8,  1. ])

pxs = []
pys = []
for i, yelems in enumerate(ys):
    x = xs[i]
    try:
        for yelem in yelems:
            pxs.append(x)
            pys.append(yelem.real)
    except TypeError:
        pxs.append(x)
        pys.append(yelems)

plt.plot(pxs, pys)
plt.show()

如您所见,我只创建了两个(一维)列表,根据需要重新使用相应的x值,以便pxspys具有相同的长度。尝试迭代内部TypeError循环中的浮点数时会引发for,即当yelems只是一个元素而不是列表时。

如果一个real有多个值(yelems是列表而不是浮点数),我还假设您只需要yelems x部分

更新

关于下面的问题,数据是否可以“直接绘制”,我从未使用Matplotlib的数据,其中y维度在x范围内变化。

根据您想要实现的目标,您可以通过对ys条目进行智能化来清理代码(即在末尾列表中创建一个而不是浮点数以保持一致性)和/或使用使用zip列出理解和/或技巧,以便在您致电plot时获得更“紧凑”的感觉。

如果可能的话,我会尽可能早地尝试直接获取输入数据,以避免需要重新安排这些条目。