/ / wykreślić wiele wartości y względem jednej wartości xw pythonie - tablice, python-2.7, matplotlib

narysuj wiele wartości y względem jednej wartości x w python - tablice, python-2.7, matplotlib

Oto moje wartości 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]

A oto moje wartości x:

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

Jak widać, pierwsza i ostatnia wartość x odpowiada jednej wartości y, reszta wartości x odpowiada wielu wartościom y. Jak więc wykreślić rzeczywistą część wartości y względem x?

Odpowiedzi:

1 dla odpowiedzi № 1

Oto rozwiązanie, które może ci pomóc. Pamiętaj, że nie jest to naprawdę wydajne (szczególnie problem dla większych zestawów danych), ale może postawić cię na właściwej drodze. Głównym problemem jest to, że wymiary pomiędzy xs i ys nie jest taki sam.

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

Jak widać, po prostu tworzę dwie (jednowymiarowe) listy, w których ponownie używam odpowiednich x wartość w razie potrzeby, aby pxs i pys mają tę samą długość. The TypeError jest podnoszony, gdy próbuje się iterować po pływaku w środku for pętla, tj. kiedy yelems jest tylko jednym elementem zamiast listy.

Zakładałem również, że chcesz tylko real część yelems jeśli istnieje wiele wartości (yelems jest listą, a nie liczbą zmiennoprzecinkową) x.

Aktualizacja:

Jeśli chodzi o twoje pytanie poniżej, czy dane można „narysować bezpośrednio”, nigdy nie użyłem takich danych w Matplotlib, gdzie wymiary y różnią się w całym zakresie x.

W zależności od tego, co chcesz osiągnąć, możesz być w stanie wyczyścić kod, zachowując spryt ys wpisy (tj. utwórz te na końcowych listach, a nie zmiennoprzecinkowe dla zachowania spójności) i / lub użyj wyrażeń listowych i / lub sztuczek za pomocą zip dla bardziej „kompaktowego” czucia, gdy dzwonisz plot.

Jeśli to w ogóle możliwe, osobiście starałbym się uzyskać dane wejściowe prosto jak najwcześniej, aby uniknąć konieczności takiej zmiany aranżacji wpisów.