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

如何去除Matplotlib X轴上的空日期刻度?

解决Matplotlib绘制Pandas DataFrame时X轴仅显示存在日期的问题

当你不用Pandas内置绘图函数,直接用Matplotlib绘制含日期的DataFrame时,常会遇到X轴自动填充空日期间隔的问题——明明DataFrame里只有非连续的有效日期,Matplotlib却硬要补上中间的空刻度,哪怕用set_xticks也达不到预期效果。这本质是因为Matplotlib会把日期自动转换成1970年以来的天数(数值类型),然后按数值轴逻辑生成刻度,自然会补全间隔。而Pandas内置绘图已经帮你处理了非连续日期的显示逻辑,所以不会有这个问题。

下面提供两种通用解决方案,支持单数据集或多数据集叠加的场景:

方法一:基于Matplotlib日期轴手动指定刻度

把DataFrame的日期列保留为datetime类型,直接传给Matplotlib,然后手动指定X轴刻度为DataFrame中存在的日期,同时配合日期格式化工具优化显示:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 构造示例非连续日期DataFrame
df = pd.DataFrame({
    'date': pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-06']),
    'value': [10, 20, 15]
})

fig, ax = plt.subplots()
# 直接传入datetime类型的日期列绘制
ax.plot(df['date'], df['value'])

# 仅设置DataFrame中存在的日期为X轴刻度
ax.set_xticks(df['date'])
# 格式化日期显示格式,避免标签重叠
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)

plt.tight_layout()
plt.show()

这种方法保留了日期的时间特性,适合需要基于日期做缩放、时间运算的场景。

方法二:将X轴设为分类轴(灵活适配多数据集)

如果不需要利用日期的时间属性,只是把日期作为分类标签展示,这种方法更灵活,尤其适合同时绘制多个日期范围不同的DataFrame:

import pandas as pd
import matplotlib.pyplot as plt

# 构造两个日期范围不同的数据集
df1 = pd.DataFrame({
    'date': pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-06']),
    'value': [10, 20, 15]
})
df2 = pd.DataFrame({
    'date': pd.to_datetime(['2024-01-02', '2024-01-04']),
    'value': [25, 18]
})

# 收集所有要显示的日期,去重后排序
all_dates = pd.concat([df1['date'], df2['date']]).drop_duplicates().sort_values()
# 建立日期到索引的映射
date_to_idx = {date: idx for idx, date in enumerate(all_dates)}

fig, ax = plt.subplots()
# 按映射后的索引位置绘制每个数据集
ax.plot([date_to_idx[d] for d in df1['date']], df1['value'], label='数据集1')
ax.plot([date_to_idx[d] for d in df2['date']], df2['value'], label='数据集2')

# 设置X轴刻度为所有存在的日期
ax.set_xticks(range(len(all_dates)))
ax.set_xticklabels(all_dates.strftime('%Y-%m-%d'), rotation=45)
ax.legend()

plt.tight_layout()
plt.show()

这种方式完全忽略日期的间隔逻辑,只按实际存在的日期生成标签,不会出现任何空刻度,且能适配任意多数据集的叠加需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:37