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

如何仅绘制DataFrame内存在的日期,而非全部连续日期?

解决Pandas折线图显示多余日期的问题

这个问题我处理时间序列可视化时也碰到过——默认情况下,Pandas会把datetime类型的索引当作连续时间轴来处理,所以自动填充了8月6日到17日之间的所有空白日期。下面分享几个实用的解决办法:

方法1:将日期转换为字符串类型

把datetime格式的日期转成字符串,让Pandas把x轴当成离散的类别而非连续时间,这样就只会显示DataFrame中实际存在的日期:

import pandas as pd

# 假设你的DataFrame是df
df['date_str'] = df['date'].astype(str)
df.set_index('date_str')['values'].plot(kind='line')

方法2:用Matplotlib手动控制刻度

如果你想保留日期的datetime类型,同时只显示存在的刻度,可以直接用Matplotlib绘图并自定义x轴:

import pandas as pd
import matplotlib.pyplot as plt

x = df['date']
y = df['values']

plt.plot(x, y)
# 把x轴刻度设置为DataFrame中实际存在的所有日期
plt.xticks(ticks=x, labels=x, rotation=45)
plt.tight_layout()  # 避免日期标签被截断
plt.show()

方法3:将日期转为分类类型(Categorical)

这种方法既能保留日期的datetime属性,又能让Pandas把它当作离散类别处理:

df['date'] = pd.Categorical(df['date'])
df.set_index('date')['values'].plot(kind='line')

补充说明

之所以会出现空白日期,是因为当索引为datetime类型时,Pandas的绘图函数默认会生成一个连续的时间范围,自动填充缺失的时间点。上面的三种方法都是通过改变索引的类型或手动控制刻度,让图表只展示你DataFrame中实际存在的日期时间点。

内容的提问来源于stack exchange,提问作者Pi-R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:12:56