ここに私の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値は1つのy値に対応し、残りのx値は複数のy値に対応します。だから、y値の実数部をxに対してプロットする方法は?
回答:
回答№1は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()
ご覧のとおり、2つの(1次元の)リストを作成して、それぞれを再利用するだけです x
必要に応じて値を pxs
そして pys
同じ長さです。ザ TypeError
内側の浮動小数点数を反復しようとすると発生します for
ループ、すなわち yelems
リストの代わりに1つの要素だけです。
私はあなたが real
の一部 yelems
複数の値がある場合(yelems
浮動小数点数ではなくリストです)。 x
.
更新:
データを "直接プロット"できるかどうかの下の質問については、Matplotlibのようなデータを使用したことがありません。ここでyの次元はxの範囲で異なります。
あなたが達成したいことに応じて、あなたはそのコードについて賢明にすることでコードをきれいにすることができます ys
(すなわち、一貫性のために浮動小数点数ではなく、最終リストに1を作る)、および/またはリスト補完および/またはトリックを使用する zip
あなたが電話をするより「コンパクト」な感じ plot
.
可能であれば、私は個人的に、エントリーの再編成の必要性を避けるために、可能な限り早期に入力データをまっすぐに取得しようとします。