/ / plottet mehrere y-Werte gegen einen x-Wert in Python-Arrays, Python-2.7, Matplotlib

Mehrere y-Werte gegen x-Werte in Python - Arrays, Python-2.7, Matplotlib plotten

Hier sind meine y-Werte:

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

Und hier sind meine x-Werte:

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

Wie Sie sehen, entsprechen der erste und der letzte x-Wert einem y-Wert, die restlichen x-Werte entsprechen mehreren y-Werten. Wie kann also der Realteil von y-Werten gegen x gezeichnet werden?

Antworten:

1 für die Antwort № 1

Hier ist eine Lösung, die Ihnen helfen könnte. Beachten Sie, dass dies nicht wirklich effizient ist (insbesondere bei größeren Datensätzen), dass Sie jedoch möglicherweise auf die richtige Spur geraten. Das Hauptproblem ist, dass die Dimensionalität zwischen Ihren Datensätzen liegt xs und ys ist nicht das Gleiche.

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()

Wie Sie sehen können, erstelle ich einfach zwei (eindimensionale) Listen, in denen ich die jeweiligen wiederverwende x Wert wie benötigt, damit pxs und pys haben die gleiche Länge Das TypeError wird angehoben, wenn versucht wird, über einen Schwimmer im Inneren zu iterieren for d. h. wann yelems ist nur ein Element anstelle einer Liste.

Ich habe auch angenommen, dass Sie nur das wollen real Teil der yelems wenn es mehrere Werte gibt (yelems ist eher eine Liste als ein Float) x.

Aktualisieren:

In Bezug auf Ihre Frage, ob die Daten "direkt geplottet" werden können, habe ich bei Matplotlib noch nie solche Daten verwendet, bei denen die y-Dimensionen im x-Bereich variieren.

Je nachdem, was Sie erreichen möchten, können Sie den Code möglicherweise bereinigen, indem Sie die Informationen über die ys Einträge (d. h. die Einträge an den Endelisten anstelle der Floats für Konsistenz machen) und / oder Listenverständnisse und / oder Tricks verwenden zip für ein "kompakteres" Gefühl, wo Sie anrufen plot.

Wenn überhaupt möglich, würde ich persönlich versuchen, die Eingabedaten so früh wie möglich zu ermitteln, um die Notwendigkeit einer Neuordnung der Einträge zu vermeiden.