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

如何在Matplotlib图表X轴显示全部30个日期?

解决Matplotlib折线图X轴显示全部30个日期的问题

Matplotlib默认会自动隐藏部分X轴标签来避免重叠,要显示全部30个日期,只需手动指定刻度并调整标签显示方式即可,步骤如下:

1. 确保日期数据为datetime类型

首先要保证你的date列是pandas的datetime格式,否则Matplotlib无法正确识别日期顺序和格式:

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

2. 手动设置X轴刻度与标签

通过plt.xticks()指定所有日期作为刻度,并旋转标签角度防止重叠,同时调整画布大小给标签足够空间:

完整示例代码

import pandas as pd
import matplotlib.pyplot as plt

# 替换为你的Web API数据获取逻辑
# 示例:模拟30条日期和收盘价数据
df = pd.DataFrame({
    'date': pd.date_range(start='2020-01-02', periods=30),
    'close': [102.5, 103.1, 104.0, 103.8, 105.2, 106.0, 105.5, 106.8, 107.2, 106.9,
              108.1, 109.0, 108.5, 110.2, 111.0, 110.8, 112.1, 113.0, 112.5, 114.2,
              115.0, 114.8, 116.1, 117.0, 116.5, 118.2, 119.0, 118.8, 120.1, 121.0]
})

# 确保日期格式正确
df['date'] = pd.to_datetime(df['date'])

# 调整画布大小,给X轴标签留出空间
plt.figure(figsize=(14, 6))

# 绘制折线图
plt.plot(df['date'], df['close'], marker='.', linestyle='-', color='#1f77b4')

# 设置X轴显示所有日期,旋转标签60度避免重叠
plt.xticks(
    ticks=df['date'],
    labels=df['date'].dt.strftime('%Y-%m-%d'),
    rotation=60,
    fontsize=10
)

# 添加图表标题和坐标轴标签
plt.title('股票AAA收盘价走势', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('收盘价', fontsize=12)

# 自动调整布局,防止标签被画布边缘裁剪
plt.tight_layout()

plt.show()

关键说明

  • plt.xticks(ticks=df['date']):强制Matplotlib使用所有日期作为X轴刻度
  • rotation=60:旋转标签角度,避免横向排列时重叠
  • figsize=(14,6):加宽画布,给X轴标签足够显示空间
  • plt.tight_layout():自动调整图表元素位置,防止标签被裁剪

如果标签还是略显拥挤,可以尝试缩小fontsize参数值,或者进一步加大画布宽度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:52:49