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

如何让Matplotlib报表柱状图X轴仅显示实际存在的日期?

问题:Matplotlib柱状图X轴显示冗余日期

我有一份记录报表调用次数的DataFrame,已按报表名称和日期完成数据汇总,但使用Matplotlib绘制柱状图时,X轴始终显示大量不存在数据的冗余日期。

示例数据:

8  ADOSperrenVK.avx"  2023-04-17   7278 
9  ADOSperrenVK.avx"  2023-04-18   4591 

当前使用的Python代码:

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

# 转换日期格式
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])

# 提取日期部分
df['Date'] = df['TimeStamp'].dt.date

# 按报表和日期分组统计调用次数
df_grouped = df.groupby([df['Report'], df['Date']]).size().reset_index(name='count')

# 筛选调用量Top10的报表
top_10_reports = df_grouped.groupby('Report').sum().nlargest(10, 'count').index.values
df_top_10 = df_grouped[df_grouped['Report'].isin(top_10_reports)]
unique_reports = df_top_10['Report'].unique().tolist()

# 循环为每个报表绘制柱状图
for report in unique_reports:
    df_report = df_top_10[df_top_10['Report'] == report]

    # 绘制图表
    x = pd.to_datetime(df_report['Date'])
    y = df_report['count']
    plt.bar(x, y)
    plt.title(report)
    plt.xlabel('Date')
    plt.ylabel('Count')
    plt.xticks(rotation=45)
    plt.show()

当前图表的X轴会自动填充数据日期之间的空白日期,我需要修改代码让X轴只显示实际存在数据的日期。


解决方案

核心原因是Matplotlib处理datetime类型的X轴时,会根据日期范围自动生成连续刻度,而非仅使用数据中存在的日期。可以通过以下两种简单方法解决:

方法1:使用字符串格式的日期作为X轴

将日期转换为字符串类型,Matplotlib会直接用数据中的每一个日期作为刻度,不会生成冗余项。

修改绘图循环中的X轴定义部分:

# 替换原来的x = pd.to_datetime(df_report['Date'])
x = df_report['Date'].astype(str)

方法2:手动指定datetime类型的X轴刻度

如果需要保留datetime类型的X轴(比如后续要做日期相关的扩展操作),可以手动设置刻度为数据中存在的日期,并自定义标签格式:

修改绘图循环中的代码:

x = pd.to_datetime(df_report['Date'])
y = df_report['count']
plt.bar(x, y)
plt.title(report)
plt.xlabel('Date')
plt.ylabel('Count')
# 手动设置X轴刻度为数据中的日期
plt.xticks(ticks=x, labels=x.strftime('%Y-%m-%d'), rotation=45)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:07:03