开发者

Pyplot colors not as expected

开发者 https://www.devze.com 2023-02-19 10:01 出处:网络
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.

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.

fr开发者_如何学运维om 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()


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:

Pyplot colors not as expected

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号