2017-07-24 10 views
2

Ich zeichne Renditen für Sektoren und alle Aktien in ihnen. Ich möchte die Werte> 100 grün und < 100 rot haben. Hier ist mein Code:Matplotlib verschiedene Farben für Bargraph basierend auf Wert

for i in sectors:      #sectors is XLK, XLY, etc 

fig = plt.figure(figsize=(20,9)) 
for x in sectordict[i]:    #sectordict[i] is all the stocks in a sector (so AAPL, GOOG, etc. for tech) 
    if pct_change[x] > 1:    #pct_change calculates the return in %  
     ((pct_change[sectordict[i]]*100).plot(kind='bar',color='g') 
    elif pct_change[x] < 1: 
     ((pct_change[sectordict[i]]*100).plot(kind='bar',color='r') 


plt.title(i) 

Bis jetzt ist dies der gesamte Sektor Diagramme als grün oder rot zurückgibt; Wenn der erste Wert> 100 ist, werden alle Aktien grün und umgekehrt.

Meine erwartete Ausgabe soll 11 Graphen haben (was es derzeit tut), aber mit unterschiedlichen Farben für jeden Bestand innerhalb der Grafik, wenn der Vorrat> 100% Rendite hatte, dann zeigt er grün und < 100% es zeigt rot.

+0

können Sie einige Zeilen von Ihrem df hinzufügen? für den einzelnen Sektor –

Antwort

1

Nach ein paar Versuchen mit Pandas plot() habe ich keinen Weg gefunden, um das zu erreichen, was Sie erwarten, aber Sie können das einfach mit Matplotlib direkt machen.

Ich hoffe, dass dies dazu beitragen wird:

I Probe df erstellt:

df = pd.DataFrame({'a' : [2,6,2,4,5,3,7]}) 

und ich schaffen zwei Temp df die nur speichert Werte die Bedingung erfüllt:

t1 = df[df['a']<5] 
t2 = df[df['a']>=5] 

und dann einfach grafisch darstellen:

plt.bar(t1.index.values, t1['a'], color='r') 
plt.bar(t2.index.values, t2['a'], color='g') 

das Endergebnis sieht wie folgt aus:

enter image description here

Ist das, was Sie erwarten?

+0

das ist, was ich will, dass die Grafik aussehen wie, aber meine Sekte ist kein df, sondern ein Wörterbuch –

+0

aber Ihre pct_change ist ein df, oder? –

+0

Wenn Sie einige Beispieldaten hinzufügen, könnte ich Ihnen mehr helfen und diese Plots an Ihr Beispiel anpassen. –

0

Sie können Ihr Ergebnis in einem einzigen Aufruf plt.bar auf diese Weise erreichen:

df = pd.DataFrame({'a' : [2,6,2,4,5,3,7]}) 
df['colors'] = 'r' 
df.loc[df.a>=5,'colors'] = 'g' 
plt.bar(df.index, df.a, color=df.colors) 

Sie auch erwähnen, in einem Kommentar, dass sectordict[i] ein Wörterbuch ist, aber Sie können leicht ein Wörterbuch in einen Datenrahmen mit konvertieren: pd.DataFrame.from_dict.

Verwandte Themen