wookie1
wookie1

Reputation: 511

Pyplot colors not as expected

Does anyone know why this code doesn't plot the boxes colors correctly. I want each component to be a different color but they all come out black with a blue legend.

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

Upvotes: 1

Views: 939

Answers (1)

Agos
Agos

Reputation: 19440

Your code, as far as the graph is concerned, is fine. The problem is that there are too many bars, so you only see the black borders. This is what looks when zooming in: enter image description here

To get the legend right, pass the label argument while plotting, then just call plt.legend() without arguments when you're done.

Upvotes: 2

Related Questions