/ / tracer plusieurs valeurs y contre une valeur x en python - tableaux, python-2.7, matplotlib

tracer plusieurs valeurs y contre un x en python - tableaux, python-2.7, matplotlib

Voici mes valeurs 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]

Et voici mes valeurs x:

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

Comme vous pouvez le voir, les première et dernière valeurs x correspondent à une valeur y, le reste des valeurs x correspond à plusieurs valeurs y. Alors, comment tracer la partie réelle des valeurs de y contre x?

Réponses:

1 pour la réponse № 1

Voici une solution qui pourrait vous aider. Notez que ce n'est pas vraiment efficace (en particulier un problème pour les grands ensembles de données), mais cela pourrait vous mettre sur la bonne voie. Le principal problème est que la dimensionnalité entre votre xs et ys ce n'est pas la même chose.

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

Comme vous pouvez le voir, je crée simplement deux listes (unidimensionnelles) où je réutilise les x valeur au besoin afin que pxs et pys avoir la même longueur. le TypeError est soulevé lorsque vous essayez d'itérer sur un flotteur à l'intérieur for boucle, c'est-à-dire quand yelems n'est qu'un élément au lieu d'une liste.

J'ai aussi supposé que vous vouliez seulement real partie de la yelems s'il existe plusieurs valeurs (yelems est une liste plutôt qu'un flottant) pour un x.

Mettre à jour:

Concernant votre question ci-dessous de savoir si les données peuvent être "tracées directement", je n'ai jamais utilisé de données comme celle-là avec Matplotlib où les dimensions y varient sur la plage x.

Selon ce que vous voulez réaliser, vous pourriez être en mesure de nettoyer le code en étant intelligent sur le ys (c.-à-d., faites celles qui se trouvent dans les listes de fin plutôt que des flottants pour la cohérence) et / ou utilisez des compréhensions de liste et / ou des astuces avec zip pour une sensation plus "compacte" où vous appelez plot.

Dans la mesure du possible, personnellement, j'essaierais d'obtenir les données d'entrée le plus tôt possible pour éviter d'avoir à réorganiser ces entrées.