Как построить диаграмму с накоплением из категориальных и числовых данных - PullRequest
0 голосов
/ 15 января 2020

Я дал несколько названий состояний с их общими открытыми и закрытыми жалобами, все три хранятся в списке.
Я хочу построить столбчатую диаграмму с накоплением, показывающую состояния на оси х, где столбец каждого состояния показывает открытые и закрытые жалобы в сложенном виде. Я сам пытался, но постоянно получаю сообщение об ошибке,

shape mismatch: objects cannot be broadcast to a single shape

Это код, который я использую

# plotting stack bar chart
indx = list(range(len(states)))
plt.figure(figsize=(12,8))
graph_state = plt.bar(x=indx, height=states, width=0.35)
graph_closed = plt.bar(x=indx, height=closed, width=0.35, bottom=states)
graph_opened = plt.bar(x=indx, height=opened, width = 0.35, bottom=closed+states)
plt.xlabel('States')
plt.ylabel('Complaints')
plt.show()

, а вот данные, которые я использовал

states = ['Maryland','Georgia','Michigan','California','NewMexico','Indiana','Virginia','Illinois','Pennsylvania','Massachusetts','Oregon','Texas','NewHampshire','Minnesota','Tennessee','Colorado','Florida','Alabama','Washington','NewYork','NewJersey','Maine','Missouri','WestVirginia','Montana','Mississippi','Connecticut','Vermont','Kentucky','SouthCarolina','Ohio','Utah','Delaware','Arkansas','Nevada','Louisiana','Kansas','Arizona','North Carolina','Rhode Island','District Of Columbia','District of Columbia','Iowa']
opened = [15,80,23,61,4,9,11,29,20,11,13,22,4,4,47,22,39,9,23,19,2,1,3,16,3,1,3,3,6,4,1,1,6,2]
closed = [63,208,92,159,11,50,49,135,110,50,36,49,8,29,96,58,201,17,75,6,56,3,3,8,1,23,9,2,4,15,3,16,8,6,1,12,1,14,3,1,14,1,1]

1 Ответ

0 голосов
/ 15 января 2020

Я могу заставить график работать, если добавлю «открытый» список такой же длины (43), как «состояния» и «закрытый»

import matplotlib.pyplot as plt

states = ['Maryland','Georgia','Michigan','California','NewMexico','Indiana','Virginia','Illinois','Pennsylvania','Massachusetts','Oregon','Texas','NewHampshire','Minnesota','Tennessee','Colorado','Florida','Alabama','Washington','NewYork','NewJersey','Maine','Missouri','WestVirginia','Montana','Mississippi','Connecticut','Vermont','Kentucky','SouthCarolina','Ohio','Utah','Delaware','Arkansas','Nevada','Louisiana','Kansas','Arizona','North Carolina','Rhode Island','District Of Columbia','District of Columbia','Iowa']
opened = [15,80,23,61,4,9,11,29,20,11,13,22,4,4,47,22,39,9,23,19,2,1,3,16,3,1,3,3,6,4,1,1,6,2,0,0,0,0,0,0,0,0,0]
closed = [63,208,92,159,11,50,49,135,110,50,36,49,8,29,96,58,201,17,75,6,56,3,3,8,1,23,9,2,4,15,3,16,8,6,1,12,1,14,3,1,14,1,1]

indx = list(range(len(states)))
width = 0.35

p1 = plt.bar(indx, opened, width)
p2 = plt.bar(indx, closed, width,
             bottom=opened)
plt.ylabel('opened')
plt.xticks(indx, states, rotation=90)
plt.tight_layout()
plt.show()
...