You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Matplotlib多索引柱状图X轴标签仅显示日期?

解决matplotlib柱状图多索引X轴标签冗余问题

下面给你几个直接能用的解决方案,不用换库就能搞定:

方案1:绘制后直接替换X轴标签

画完柱状图后,提取多索引里的年份和月份重新设置标签:

# 假设你的数据框是df,多索引结构为(客户名, 年份, 月份)
# 获取当前图表的轴对象
ax = plt.gca()
# 遍历原多索引,只保留年份+月份拼接成新标签
new_x_labels = [f"{year}-{month}" for (_, year, month) in df.index]
# 替换原标签
ax.set_xticklabels(new_x_labels)
# 可选:旋转标签避免重叠
plt.xticks(rotation=45)

方案2:预处理数据,单独拆分日期列

在绘图前把多索引里的日期部分拆成单独列,直接用这个列当X轴:

# 从多索引中提取年份和月份,合并成日期列
df['date'] = df.index.get_level_values(1).astype(str) + '-' + df.index.get_level_values(2).astype(str)
# 绘制柱状图时用date列作为X轴
plt.bar(df['date'], df['业绩数据'])
plt.xlabel('日期')

方案3:自定义Formatter控制标签显示

如果需要更灵活的标签格式(比如补零、换分隔符),可以用自定义Formatter:

from matplotlib.ticker import FuncFormatter

# 自定义标签格式化函数
def format_date(x, pos):
    # 根据索引位置获取对应的多索引值
    customer, year, month = df.index[int(x)]
    # 返回你想要的日期格式,比如YYYY-MM
    return f"{year}-{str(month).zfill(2)}"

# 应用Formatter到X轴
ax = plt.gca()
ax.xaxis.set_major_formatter(FuncFormatter(format_date))
plt.xticks(rotation=45)

注意:循环处理每个客户时,要确保每次绘图都针对当前子图的轴对象操作,别和其他客户的图表混淆。

内容的提问来源于stack exchange,提问作者Roman_20029

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:55:09