Постройте многополосную диаграмму на тех же осях с помощью matplotlib - PullRequest
1 голос
/ 18 июня 2020

Я использую matplotlib и python 3,7 для построения отчета о расходах, разделенного на категории.

Цель состоит в том, чтобы построить многополосную диаграмму для сравнения данных по годам.

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

Это код, использованный для создания этого графика:

data = {'category 1': 120.50,
        'category 2': 135.59,
        'category 3': 130.71,
        'category 4': 150.71}
group_data = list(data.values())
group_names = list(data.keys())

fig, axs = plt.subplots(2)
axs[0].plot(group_names, group_data, label="2020")
axs[0].plot(group_names, [v * 1.1 for v in group_data], label="2019")

axs[1].bar(group_names, group_data, label="2020")
axs[1].bar(group_names, [v * 1.1 for v in group_data], label="2019")


axs[0].legend()

Посмотрел официальный do c (https://matplotlib.org/3.2.1/gallery/lines_bars_and_markers/categorical_variables.html), но не нашел подходящего решения.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете использовать Pandas для простой функции построения графика:

import pandas as pd

# 2020 data
df = pd.DataFrame({'2020':data})

# 2019 data
df['2019'] = df['2020'] * 1.1

# plot bar
df.plot.bar()

Вывод:

enter image description here

0 голосов
/ 18 июня 2020

Вы можете использовать параметр zorder, чтобы определить порядок стека ваших баров. Столбцы с меньшей высотой должны иметь более высокий z-порядок , чтобы они появлялись спереди.

axs[1].bar(group_names, group_data, label="2020", zorder=1)
axs[1].bar(group_names, [v * 1.1 for v in group_data], label="2019", zorder=0)

enter image description here

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