如何为Pandas柱状图设置格式规范的X轴标签?
如何为Pandas柱状图设置格式规范的X轴标签?
问题现象
运行以下代码绘制折线图时,X轴的日期标签会自动适配格式,显示规范清晰:
covid = pd.read_csv("https://covid.ourworldindata.org/data/owid-covid-data.csv") covid.set_index("date", inplace=True) covid.index = pd.to_datetime(covid.index) covid[covid.location=="Denmark"].new_cases_smoothed_per_million.plot()
折线图效果:X轴日期按合理间隔展示,无重叠,格式规范
但改用bar方法绘制柱状图时,X轴所有日期标签会挤在一起,格式混乱无法阅读:
covid[covid.location=="Denmark"].new_cases_smoothed_per_million.plot.bar()
柱状图问题:X轴标签密集重叠,无法分辨日期信息
解决方法
Pandas柱状图默认会渲染所有索引标签,而日期类数据通常条目众多,导致标签重叠。以下是几种实用的优化方案:
1. 用Matplotlib工具自定义刻度格式与间隔
借助Matplotlib的日期处理模块,指定刻度显示间隔和格式:
import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, MonthLocator # 筛选丹麦的目标数据 dk_data = covid[covid.location=="Denmark"].new_cases_smoothed_per_million # 绘制柱状图并获取坐标轴对象 ax = dk_data.plot.bar(figsize=(12, 6)) # 设置X轴主刻度:每3个月显示一个标签 ax.xaxis.set_major_locator(MonthLocator(interval=3)) # 设置日期显示格式为「年-月」 ax.xaxis.set_major_formatter(DateFormatter("%Y-%m")) # 旋转标签避免重叠,调整布局防止截断 plt.xticks(rotation=45) plt.tight_layout() plt.show()
2. 对日期数据降采样减少标签数量
若无需展示每日数据,可先按周/月聚合数据,再绘制柱状图:
# 按月聚合,取每日数据的平均值 dk_monthly = dk_data.resample("M").mean() # 绘制聚合后的柱状图,X轴自动显示规范的月份标签 dk_monthly.plot.bar(figsize=(10, 6)) plt.xticks(rotation=45) plt.tight_layout() plt.show()
3. 手动指定要显示的刻度位置与标签
直接筛选部分索引作为刻度,避免全部渲染:
ax = dk_data.plot.bar(figsize=(12, 6)) # 每隔100天选取一个刻度 ticks = ax.get_xticks()[::100] # 转换为指定格式的日期标签 labels = [dk_data.index[i].strftime("%Y-%m-%d") for i in ticks] # 应用自定义刻度 ax.set_xticks(ticks) ax.set_xticklabels(labels, rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Jason Strimpel
相关产品推荐
相关产品推荐

