首页 > 解决方案 > 如何在 matplotllib 条形图的 x 轴上添加第二行标签

问题描述

我有一个 Pandas 数据框,它使用“季度”和“年”记录时间,如下所示:

import pandas as pd

myDF = pd.DataFrame({'quarter':['Q1','Q2','Q3','Q4','Q1','Q2','Q3','Q4','Q1','Q2','Q3','Q4'],
                     'year':[2018,2018,2018,2018,2019,2019,2019,2019,2020,2020,2020,2020],
                     'data':[2,3,4,3,4,5,6,5,6,7,8,7,8,9,10,9]})

看起来像:

    year quarter  data
0   2018      Q1     2
1   2018      Q2     3
2   2018      Q3     4
3   2018      Q4     3
4   2019      Q1     4
5   2019      Q2     5
6   2019      Q3     6
7   2019      Q4     5
8   2020      Q1     6
9   2020      Q2     7
10  2020      Q3     8
11  2020      Q4     7

我可以使用以下方法绘制“数据”与“季度”的条形图:

fig = plt.figure()
ax = fig.add_subplot(111)
rects = ax.bar(np.arange(len(myDF['quarter'])),
               myDF['data'],
               width = 0.8,
               )
ax.set_xticks(np.arange(len(myDF['quarter'])))
ax.set_xticklabels(myDF['quarter'])

plt.show()

情节显示为:

![条形图,按季度绘制数据

我希望能够在 x 轴上添加一个额外的行来给出年份,或者将年份向左对齐,以便年份值显示在 Q1 的正下方或对齐中间,以便年份值显示在 Q2 和 Q3 之间的中点下方.

标签: pythonpandasmatplotlib

解决方案


在这种情况下,最简单的方法是更改​​标签,将年份添加到每个Q1

fig, ax = plt.subplots()
rects = ax.bar(np.arange(len(myDF['quarter'])), myDF['data'], width=0.8)
ax.set_xticks(np.arange(len(myDF['quarter'])))
ax.set_xticklabels([f'{q}\n{y % 100:02d}' if q == 'Q1' else q 
                    for q, y in zip(myDF['quarter'], myDF['year'])])
plt.show()

结果图


推荐阅读