2011-03-23 3 views
1

Est-ce que quelqu'un sait pourquoi ce code ne trace pas correctement les couleurs des boîtes. Je veux que chaque composant soit d'une couleur différente mais ils sortent tous noirs avec une légende bleue.Les couleurs Pyplot ne sont pas celles attendues

from numpy import array, zeros 
import matplotlib.pyplot as plt 

# Components: Useage times (start, stop), wattage, detail 

COMPONENTS = {"fridge": ([(0.0,24.0)], 35, " Litres"), 
       "kettle": ([(7.3,7.33), (19.0,19.3)], 2500, ""), 
       "netbook": ([(8.0,9.3),(12.0,15.0)], 12.5, ""), 
       "light bulb": ([(18.0,22.0)], 20, "") 
       } 
COLORS = ('b','g','r','c','m','y','k','w') 
PLOT = [] 
TIME = range(24*60) 

Powers = [] # list of array of power for each component 
for key in COMPONENTS.keys(): # each useage 
    p = zeros(len(TIME)) 
    for j in COMPONENTS[key][0]: # start and stop 
     start = round(j[0]*60) 
     end = round(j[1]*60) 
     p[start:end] = COMPONENTS[key][1] 
    Powers.append(p) 

b=zeros(len(TIME)) 
for i in range(len(COMPONENTS.keys())): 
    PLOT.append(plt.bar(TIME,Powers[i],width = 1, color=COLORS[i], bottom=b)) 
    b+=Powers[i] 


plt.ylabel('Power (W)') 
plt.xlabel('Time (h)') ### 
plt.title('Power Cycle') 
plt.xticks(range(0,25*60,60) ,[str(t) for t in range(25)]) 
plt.legend(tuple([i for i in PLOT]), tuple([c for c in COMPONENTS.keys()])) 

plt.show() 
+1

Qu'est-ce qui vous a donné l'idée d'utiliser tous les noms de variables majuscules? Cela me fait mal aux yeux! –

Répondre

2

Votre code, en ce qui concerne le graphique, est correct. Le problème est qu'il y a trop de barres, donc vous ne voyez que les bordures noires. C'est ce qui ressemble lorsque vous zoomez: enter image description here

Pour obtenir le droit de légende, passer l'argument label tout en traçant, alors il suffit d'appeler plt.legend() sans arguments lorsque vous avez terminé.

+0

Nice, merci – wookie1

Questions connexes