簡體   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