2017-07-02 3 views
2

Ich bin neu in Python und ich versuche ein Streudiagramm zu erstellen, das für jeden xtick mehrere y Werte zeigt. Ich habe diese Frage gefunden, die mir geholfen hat, eine Art Code zu entwickeln: Python Scatter Plot with Multiple Y values for each X.matplotlib - Streudiagramm, wähle Farben für y Tupel

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

Das Problem ist, dass zum Beispiel, dieser Code abwechselnd druckt die Punkte des ersten Tupels in rot und blau. Allerdings drucke ich gerne alle Punkte des 1. Tupels (zB (1,1,2,3,9)) blau, alle Punkte des nächsten Tupels (zB (1,1,2,4)) rot etc. Gibt es eine Möglichkeit, die Farbe so zu spezifizieren? Ich bin noch nicht auf eine ähnliche Frage gestoßen.

Ich schätze wirklich jeden Hinweis oder Hilfe!

+0

Das erste Tupel in 'y' hat 5 Einträge, aber Sie haben nur 4 'X' Werte. Was ist das erwartete Ergebnis? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Ich mag es, alle y-Werte für jedes x zu plotten (in meinem echten Code enthält jedes Tupel 1000 Zahlen), also wird das erste Tupel über dem ersten xtick, das nächste tuple über dem nächsten xtick usw. geplottet hatte keine Probleme mit der unterschiedlichen Anzahl von Werten. Siehst du hier einen Fehler? –

Antwort

2

Verwenden itertools.cycle Ihre Farben zu Zyklus und zip sie mit dem Tupel in der Schleife:

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

schön, vielen Dank für die schnelle Antwort! es ist perfekt! –

Verwandte Themen