【问题标题】:plot multiple y values against one x values in python在 python 中针对一个 x 值绘制多个 y 值
【发布时间】:2015-11-25 00:58:24
【问题描述】:

这是我的 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 值。那么如何根据 x 绘制 y 值的实部?

【问题讨论】:

标签: arrays python-2.7 matplotlib


【解决方案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 只是一个元素而不是列表时。

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

更新:

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

根据您想要实现的目标,您可以通过对ys 条目的聪明处理来清理代码(即,将这些条目放在末尾列表而不是浮动以保持一致性)和/或使用列表推导和/或 zip 的技巧,让您在调用 plot 时获得更“紧凑”的感觉。

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

【讨论】:

  • 非常感谢。我已经使用您的方法的精神来重写我的代码并且它有效。但是python可以直接绘制x:[1,2,3] y:[1, [1,2,3], 3]吗?
  • 不客气。请参阅我关于您的问题的更新。
猜你喜欢
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多