2017-07-02 2 views
2

Je suis nouveau sur Python et j'essaye de créer un nuage de points montrant plusieurs valeurs y pour chaque xtick. J'ai trouvé cette question qui m'a aidé à trouver une sorte de code: Python Scatter Plot with Multiple Y values for each X.matplotlib - scatterplot, choisissez des couleurs pour les tuples

x = [1,2,3,4] 
y = [(1,1,2,3,9),(1,1,2,4), (0.5,4), (0.1,2)] 

for xe, ye in zip(x, y): 
    plt.scatter([xe] * len(ye), ye, color=['blue', 'red']) 

plt.xticks([1, 2, 3, 4]) 
plt.axes().set_xticklabels(['5', '10', '15', '25']) 
plt.ylim(0, 1) 

plt.show() 

Le problème est que, par exemple, ce code imprime alternativement les points du 1er tuple en rouge et bleu. Cependant, j'aime imprimer tous les points du 1er tuple (par exemple (1,1,2,3,9)) en bleu, tous les points du tuple suivant (par exemple (1,1,2,4)) en rouge etc. Y a-t-il un moyen de spécifier la couleur de cette manière? Je n'ai pas encore rencontré une question similaire.

J'apprécie vraiment n'importe quel conseil ou aide!

+0

Le premier tuple 'y' a 5 entrées, mais vous ne disposez que 4' x' valeurs. Quel est le résultat attendu de cela? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest J'aime tracer toutes les valeurs de y pour chaque x (dans mon code réel, chaque tuple inclut 1000 nombres), donc le premier tuple est tracé sur le premier xtick, le tuple suivant est tracé sur le xtick suivant, etc. n'a eu aucun problème avec le nombre différent de valeurs. Voyez-vous une erreur ici? –

Répondre

2

Utilisez itertools.cycle pour faire défiler vos couleurs, et les zip avec vos tuples dans la boucle:

for (xe, ye), color in zip(zip(x, y), itertools.cycle(['blue', 'red'])): 
    pyplot.scatter([xe] * len(ye), ye, color=color) 
+0

sympa, merci beaucoup pour la réponse rapide! il est parfait! –