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 № 1Hier 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.