Гистограмма с использованием словарей в python с использованием matplotlib - PullRequest
0 голосов
/ 02 июля 2018

У меня есть два словаря:

A = {2018: 23, 2019: 30}
B = {2018: 26, 2019:35} 

Теперь я хочу построить тренд на 2018/2019 гг. Для A и B. Однако при построении гистограммы я получаю следующий результат. Годы расширяются, чтобы заполнить пространство, и Б полностью скрывает А. Подскажите пожалуйста, как построить график.

enter image description here

Исходные данные имеют средние оценки по математике, естественным наукам и итоги, которые я хочу построить на одном графике (гистограмме) в течение двух лет, чтобы показать тренд.

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете выровнять столбцы гистограммы по левому краю правого края (пропустите отрицательную ширину, чтобы выровнять, используя правый край) - таким образом, вы можете получить рядом столбцы. Кроме того, вы можете сложить бары.

Вот код с выводом:

import matplotlib.pyplot as plt

A = {2018: 23, 2019:30}
B = {2018: 26, 2019:35}

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(12,5))

ax1.bar(A.keys(), A.values(), width=0.2, align='edge', label='A')
ax1.bar(B.keys(), B.values(), width=-0.2, align='edge', label='B')
ax1.set_xticks([2018, 2019])
ax1.set_xlabel('YEAR')
ax1.legend()

ax2.bar(A.keys(), A.values(), width=0.4, align='center', label='A')
ax2.bar(B.keys(), B.values(), bottom=[A[i] for i in B.keys()], width=0.4, align='center', label='B')
ax2.set_xticks([2018, 2019])
ax2.set_xlabel('YEAR')
ax2.legend()

fig.show()

enter image description here

РЕДАКТИРОВАТЬ : Если вы начинаете работать с большим количеством данных, имеет смысл использовать пакет, который может легче обрабатывать данные. Панды - отличный пакет, который сделает это за вас.

Вот пример с 4 наборами данных временных рядов:

import matplotlib.pyplot as plt
import pandas as pd

A = {2018: 23, 2019:30}
B = {2018: 26, 2019:35}
C = {2018: 30, 2019:40}
D = {2018: 20, 2019:50}

df = pd.DataFrame([A,B,C,D], index=['A','B','C','D']).transpose()

fig, ax= plt.subplots(1,1, figsize=(6,5))

df.plot.bar(ax=ax)
ax.set_xlabel('YEAR')

fig.tight_layout()
fig.show()

Вывод этой цифры: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...