我正在使用Python中的matplotlib创建一个堆叠条形图,按小时显示一天的订单量,与去年的日历等效日相比。
我已经安排了一个数组,其中包括今天和去年的订单量:
allorders=[(23, 28), (15, 7), (15, 5), (8, 9), (4, 2), (5, 3), (4, 6), (8, 10), (28, 24), (45, 46), (55, 65), (0, 74), (0, 64), (0, 58), (0, 62), (0, 62), (0, 42), (0, 43), (0, 38), (0, 39), (0, 32), (0, 40), (0, 41), (0, 16)]
对于堆叠条,通常使用以下语法:
import matplotlib.pyplot as plt
import numpy as np
n=2
ind = np.arange(n)
width = 0.35
plt.ylabel('Orders')
plt.xticks(ind+width/2., ('Today', 'Last Year on Calendar Equivalent'))
plt.yticks(np.arange(0,plottotal,10))
p1= plt.bar(ind, allorders[0], width, color='#000099')
p2= plt.bar(ind, allorders[1], width, color='#000099', bottom=allorders[0])
然而,对于大量堆叠的图表,这可能会令人望而生畏。因此,我试图创建一个循环来遍历'allorders'数组并通过:
将它们堆叠起来: for i in allorders:
if i=0:
p1=plt.bar(ind, allorders[i], width, color='#000099')
bottomcounter=allorders[i]
else:
'p+i' = plt.bar(ind, allorders[i], width, color='r', bottom=bottomcounter)
bottomcounter=bottomcounter+allorders[i]
但是,我得到了各种各样的错误,包括子句if i=0
具有无效的语法,并且'p+ I '不能用于自动命名变量。
So, So wizards:
如何在循环中自动命名新变量(所以当
i=0
时,变量被命名为p0
,当i=1
时,变量被命名为p1
,等等)包括
if i=0
条款有什么问题?
因为我是Python的新手(来自R和Stata),请像对待婴儿一样对待我,如果可以的话,用一步一步的代码!
谢谢!
首先,您需要阅读并理解官方教程。
第二,修复你的代码:import itertools
allorders=[(23, 28), (15, 7), (15, 5), (8, 9), (4, 2), (5, 3), (4, 6), (8, 10), (28, 24), (45, 46), (55, 65), (0, 74), (0, 64), (0, 58), (0, 62), (0, 62), (0, 42), (0, 43), (0, 38), (0, 39), (0, 32), (0, 40), (0, 41), (0, 16)]
width = .35
plts = []
colors = ['k','r','b']
for i,order in enumerate(allorders):
bottom_counter = 0
loc_plts = []
for o,c in zip(order,itertools.cycle(colors)):
tmp_plt = plt.bar(i, o, width, color=c, bottom=bottom_counter)
loc_plts.append(tmp_plt)
bottom_counter+=o
plts.append(loc_plts)