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

Matplotlib散点图X轴日期标签过多,如何减少显示数量?

解决Matplotlib日期X轴标签拥挤的问题

首先明确核心问题:你的日期数据是object类型(字符串格式),Matplotlib会将其当作普通分类数据处理,这就是你之前尝试的定位器方法无效的根本原因。先把日期转换成datetime类型,再配合轴定位器就能轻松解决标签拥挤问题。

方法1:按时间间隔显示标签(推荐)

将日期转为datetime后,用matplotlib.dates中的定位器按年/月等时间间隔设置标签,代码示例:

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

# 先把日期列转为datetime类型
df['DATE'] = pd.to_datetime(df['DATE'])

x = df.DATE
y = df.CLOSE

plt.figure(figsize=(21,12))
plt.scatter(x, y)

# 获取当前轴对象(无需提前定义ax)
ax = plt.gca()
# 设置X轴按每年显示一个标签,也可替换为mdates.MonthLocator(interval=6)实现每半年显示
ax.xaxis.set_major_locator(mdates.YearLocator())
# 设置日期显示格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

plt.xticks(fontsize=8, rotation=45)
plt.show()

方法2:每N个日期显示一个标签

如果需要固定每10个数据点显示一个标签,可以手动设置xticks的索引间隔:

import matplotlib.pyplot as plt
import pandas as pd

df['DATE'] = pd.to_datetime(df['DATE'])

x = df.DATE
y = df.CLOSE

plt.figure(figsize=(21,12))
plt.scatter(x, y)

# 每10个日期取一个标签
interval = 10
plt.xticks(x[::interval], x.dt.strftime('%Y-%m-%d')[::interval], fontsize=8, rotation=45)

plt.show()

方法3:限制最多N个标签

用MaxNLocator直接限制X轴标签数量,前提是日期已转为datetime类型:

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import pandas as pd

df['DATE'] = pd.to_datetime(df['DATE'])

x = df.DATE
y = df.CLOSE

plt.figure(figsize=(21,12))
plt.scatter(x, y)

ax = plt.gca()
# 设置最多显示15个标签,可根据需求调整数值
ax.xaxis.set_major_locator(MaxNLocator(15))

plt.xticks(fontsize=8, rotation=45)
plt.show()

关键提示

  • 必须先将object类型的日期转为datetime,否则Matplotlib无法识别为时间序列,所有日期相关的定位器都会失效。
  • plt.gca()可直接获取当前的轴对象,解决你之前没有axes对象的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:10:29