2017-07-24 4 views
2

Je suis en train de tracer des rendements pour les secteurs et tous les stocks en leur sein. Je voudrais avoir les valeurs> 100 pour être vert, et < 100 pour être rouge. Voici mon code:Matplotlib différentes couleurs pour le graphique à barres basé sur la valeur

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) 

Jusqu'à présent, tous les graphiques de secteurs sont affichés en vert ou en rouge; Si la première valeur est> 100, toutes les actions seront vertes et vice versa. Mon résultat attendu est d'avoir 11 graphiques (ce qu'il fait actuellement), mais avec des couleurs différentes pour chaque stock dans le graphique, si le stock avait> 100% de retour alors il montre vert et < 100% il montre rouge.

+0

pouvez-vous ajouter quelques lignes de votre df? pour un seul secteur –

Répondre

1

Après quelques essais avec Pandas plot(), je n'ai pas trouvé le moyen de réaliser ce que vous attendiez, mais vous pouvez facilement le faire avec Matplotlib directement.

J'espère que cela vous aidera:

J'ai créé échantillon df:

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

et je créer deux temp df qui stockera les valeurs ne satisfaisant à la condition:

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

puis il suffit de le tracer:

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

le résultat final ressemble à ceci:

enter image description here

Est-ce ce que vous attendez?

+0

c'est ce que je veux que le graphique ressemble, mais mon sectordict [i] n'est pas un df, mais plutôt un dictionnaire –

+0

mais votre pct_change est un df, non? –

+0

Si vous allez ajouter des exemples de données, je pourrais vous aider davantage, et personnaliser ces graphiques à votre exemple. –

0

Vous pouvez obtenir votre résultat dans un seul appel à plt.bar cette façon:

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) 

Vous avez également mentionné dans un commentaire que sectordict[i] est un dictionnaire, mais vous pouvez facilement convertir un dictionnaire en dataframe avec: pd.DataFrame.from_dict.