Python条形图中的循环和命名变量

时间:2012-12-28 16:30:35

标签: python numpy matplotlib bar-chart pythonxy

我在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]

但是,我得到各种错误,包括“如果i = 0”这个子句的语法无效,并且'p + i'不能用于自动命名变量。

所以,SO巫师:

1)如何在循环中自动命名新变量(所以当i = 0时,变量名为p0,当i = 1时,变量名为p1,等等。)

2)包含'if i = 0'条款有什么问题?

由于我是Python的新手(来自R和Stata),请像对待婴儿一样对待我,如果可以的话,请逐步编写代码!

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要阅读并理解官方tutorial

其次,修复你的代码:

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)
相关问题