2017-03-25 7 views
1

Ich habe nach einer Lösung gesucht, wie man Punkte in einem Punktdiagramm in Abhängigkeit vom Wert einer 'dritten' Spalte setzt. Ich konnte keine fertige Lösung finden, also habe ich meine eigene gebaut, und ich möchte sie teilen (vielleicht wird jemand sie nutzen) :) Wenn dies kein Ort ist, um es zu posten, dann tut es mir leid und bitte entferne es.Pandas/Python/Matplotlib Streudiagramm Marker Farbe abhängig von einem Wert aus einer Zelle

Nehmen wir an, dass es ein Datenrahmen ‚scatterData‘ ist wie folgt:

lad2014_name Male Female Result 
0 ABERDEEN CITY 95154 97421 -21.78 
1 ABERDEENSHIRE 101875 105141 -13.10 
2 ADUR 24047 26574 -16.16 
3 ALLERDALE  38346 40192 -44.56 
. 
. 
. 
499 AMBER VALLEY 48720 51502 -3.56 

ich plotten möchten die männlichen und weiblichen auf einem Streudiagramm, aber ich möchte auch zeigen, ob das ‚Ergebnis‘ negativ oder positiv, indem Sie die Farbe des Markers ändern. So habe ich das getan:

def resultColour(z): 
    colour = '#e31a1c' 
    if z > 0: 
     colour = '#1f78b4' 
    return colour 

#Plotting the scatter plot 
plt.figure(figsize=(12,10)) 

for index, row in scatterData.iterrows(): 
    x = row.Male 
    z = row.Result 
    y = row.Female 
    t = resultColour(z) 
    plt.scatter(x, y, c=t,s=85) 
plt.xlabel('X axis lable',fontsize=15) 
plt.ylabel('Y axis lable',fontsize=15) 

plt.title('Plot title',fontsize=18) 

plt.plot() 

Es erzeugt Streu wie unten

Scatter plot

Antwort

0

Sie können tatsächlich in plt.scatter ein Array von Werten für das c Schlüsselwort-Argument liefern. Sie werden den Markierungsfarben entsprechend einer Farbpalette zugeordnet, die Sie mit dem Schlüsselwort cmap festlegen können.

Beispiel:

import pandas as pd 
import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import cm 

np.random.seed(0) 
df = pd.DataFrame({'x':np.random.randint(0,10,size=20), 
        'y':np.random.randint(0,10,size=20), 
        'z':np.random.uniform(-1,1,size=20)}) 

plt.figure(figsize=(5,5)) 
plt.scatter(df.x, df.y, c = df.z>0, cmap = cm.RdYlGn) 

Erzeugt

a colored scatterplot

cm Das Modul verfügt über eine große selection of colormaps. Wenn Sie Ihre eigenen exakten Farben benötigen, dann könnten Sie eine gelistete Colormap wie folgt verwenden:

cmap = matplotlib.colors.ListedColormap(['#e31a1c','#1f78b4']) 
plt.scatter(df.x, df.y, c = df.z>0, cmap = cmap) 
+0

Danke. Das führt zwar zu dem gleichen Ergebnis wie meine Lösung, ist aber viel einfacher und eleganter. – Sylvekk

Verwandte Themen