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

Matplotlib绘制苹果股价图时最后一个X轴刻度标签不显示问题求助

解决苹果股价走势图X轴缺失最后一个刻度标签的问题

问题现象

运行以下代码绘制苹果股价走势时,生成的图表X轴会缺失最后一个日期刻度标签:

import numpy as np
import matplotlib.pyplot as plt
from random import random
import statsmodels.api as sm
import pandas as pd
from matplotlib.ticker import MaxNLocator

data = pd.read_csv('data_assign_p3-1.csv')
fig, axes = plt.subplots(1, 1)
axes.plot(data['DATE'], data['APPLE'])
axes.xaxis.set_major_locator(MaxNLocator(4))
fig.suptitle('Apple')
plt.show()

图表表现为:X轴仅显示前3个日期刻度,最后一个数据点对应的日期标签未被渲染。

问题根源

MaxNLocator(4) 是通用刻度定位器,它会自动调整刻度位置以追求“视觉美观”,当日期数据跨度不符合其计算的间隔时,会自动截断最后一个刻度,导致首尾刻度无法同时显示。另外,代码中未将DATE列转为日期时间类型,matplotlib将其视为普通字符串,进一步干扰了刻度的计算逻辑。

可行解决方案

方案1:用日期专用定位器处理(推荐)

针对日期类型的X轴,使用matplotlib.dates模块下的专用定位器和格式化器,能自动适配日期范围并保证首尾刻度显示:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.dates import AutoDateLocator, DateFormatter

# 读取数据并转换日期格式(核心步骤)
data = pd.read_csv('data_assign_p3-1.csv')
data['DATE'] = pd.to_datetime(data['DATE'])

fig, axes = plt.subplots(1, 1)
axes.plot(data['DATE'], data['APPLE'])

# 设置日期定位器(限制显示3-4个刻度)和格式化器
locator = AutoDateLocator(minticks=3, maxticks=4)
formatter = DateFormatter('%Y-%m-%d')  # 可根据需求调整日期格式
axes.xaxis.set_major_locator(locator)
axes.xaxis.set_major_formatter(formatter)

# 优化显示效果
fig.suptitle('Apple股价走势')
plt.xticks(rotation=45)  # 旋转标签避免重叠
plt.tight_layout()  # 自动调整布局防止标签被截断
plt.show()

方案2:手动指定刻度位置

如果坚持使用MaxNLocator,可以手动提取并设置要显示的刻度,强制包含首尾日期:

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

data = pd.read_csv('data_assign_p3-1.csv')
data['DATE'] = pd.to_datetime(data['DATE'])

fig, axes = plt.subplots(1, 1)
axes.plot(data['DATE'], data['APPLE'])

# 手动生成4个刻度位置:首尾+中间两个均匀分布的点
tick_indices = np.linspace(0, len(data)-1, 4, dtype=int)
axes.set_xticks(tick_indices)
# 格式化日期标签
axes.set_xticklabels(data['DATE'].iloc[tick_indices].dt.strftime('%Y-%m-%d'))

fig.suptitle('Apple股价走势')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

关键注意事项

  • 必须将DATE列转换为日期时间类型,否则matplotlib无法正确识别数据的时间属性,刻度计算会出错。
  • plt.tight_layout()能自动调整图表布局,避免X轴标签被边缘截断。
  • 旋转X轴标签可以有效避免日期文本重叠,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:40:40