Циклы и именование переменных в гистограмме Python

Я использую matplotlib в Python для создания столбчатой ​​диаграммы с накоплением, показывающей объем заказов в течение дня за часом, по сравнению с календарным эквивалентом в прошлом году.

Я уже организовал массив, который включает объем заказов на сегодняшний и прошлый год:

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' не может использоваться для автоматического именования переменных.

Итак, ТАК волшебники:

1) как вы называете новые переменные автоматически в цикле (поэтому, когда i=0, переменная называется p0, когда i=1, переменная называется p1 и т. Д.)

2) что не так с включением предложения if i = 0?

Так как я новичок в Python (из R и Stata), пожалуйста, относитесь ко мне как к младенцу, с пошаговым кодом, если можете!

Спасибо!

1 ответ

Для начала вам необходимо прочитать и понять официальный учебник.

Во-вторых, чтобы исправить ваш код:

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)
Другие вопросы по тегам