【发布时间】:2012-12-28 16:30:34
【问题描述】:
我在 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 向导:
-
如何在循环中自动命名新变量(所以
i=0时,变量命名为p0,i=1时,变量命名为p1等) -
包含
if i=0子句有什么问题?
由于我是 Python 新手(来自 R 和 Stata),请像对待婴儿一样对待我,如果可以的话,请提供一步一步的代码!
谢谢!
【问题讨论】:
-
一般来说,你的想法是对的。问题是您的代码中有太多语法错误。你必须学会DEBUG,而不是看错误而不采取行动,而是将代码粘贴到这里。
-
Hey Skyler -- 我明白这里需要调试,但由于我是 Python 新手,所以我不知道如何响应错误(例如 'i=0' 异常)。
-
改用
if i==0。它是 Python 的一个非常基本的语法。请拿一本书并学习Python。 SO 适用于特定问题,但我们不提供任何服务在您自己尝试之前。 -
嘿 Skyler -- 如果 i==0,我已经尝试过,但仍然收到无效的语法错误...
标签: python numpy matplotlib bar-chart pythonxy