这是我的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?
答案 0 :(得分:1)
这是一个可能对您有帮助的解决方案。请注意,这不是很有效(特别是对于更大的数据集的问题),但可能会让您走上正确的轨道。主要问题是xs
和ys
之间的维度不一样。
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
值,以便pxs
和pys
具有相同的长度。尝试迭代内部TypeError
循环中的浮点数时会引发for
,即当yelems
只是一个元素而不是列表时。
如果一个real
有多个值(yelems
是列表而不是浮点数),我还假设您只需要yelems
x
部分
关于下面的问题,数据是否可以“直接绘制”,我从未使用Matplotlib的数据,其中y维度在x范围内变化。
根据您想要实现的目标,您可以通过对ys
条目进行智能化来清理代码(即在末尾列表中创建一个而不是浮点数以保持一致性)和/或使用使用zip
列出理解和/或技巧,以便在您致电plot
时获得更“紧凑”的感觉。
如果可能的话,我会尽可能早地尝试直接获取输入数据,以避免需要重新安排这些条目。