繁体   English   中英

Plot 与 matplotlib 相同轴上的多条形图

[英]Plot a multi bar graph on the same axes with matplotlib

我正在使用matplotlib和 python 3.7 到 plot 的费用报告分为几类。

目标是 plot 一个多条形图来逐年比较数据。

我找到了一种使用折线图的方法,但不是使用更合适的条形图,因为条形图只是相互重叠。 在此处输入图像描述

这是用于生成此图的代码:

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()

查看了官方文档( https://matplotlib.org/3.2.1/gallery/lines_bars_and_markers/categorical_variables.html )但没有找到合适的解决方案。

您可以考虑 Pandas 方便 plot function:

import pandas as pd

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

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

# plot bar
df.plot.bar()

Output:

在此处输入图像描述

您可以使用参数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)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM