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

Matplotlib绘图仅显示两组坐标轴刻度异常问题求助

Matplotlib图表仅显示两组轴刻度异常问题

问题现象

使用Matplotlib绘制图表时,仅显示两组X轴刻度和两组Y轴刻度,无法正常展示数据,异常图表如下:
异常图表

原始代码

fig = plt.figure(figsize=(16,12))
ax1 = fig.add_subplot(1, 1, 1)
ax1.plot(data['timestamp'], data['value'], 'r', label='value')
ax1.set_xlabel('date', fontsize=16)
ax1.set_ylabel('profit', fontsize=16)
ax1.legend(loc='upper left')
ax1.grid(True)

数据详情

timestamp列(datetime64[ns]类型):

0   2010-01-04
1   2010-01-04
2   2010-03-08
3   2010-07-05
4   2010-11-04

value列:

0    1.037868
1    1.085912
2    1.092537
3    1.077828
4    1.160641

已尝试操作

添加日期格式化与刻度定位代码,但问题未改善:

ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))
ax1.xaxis.set_major_locator(mdates.YearLocator())
ax1.xaxis.set_minor_locator(mdates.MonthLocator())

当前轴刻度信息

获取到的X轴刻度值:[14610. 14641. 14669. 14700. 14730. 14761. 14791. 14822. 14853. 14883. 14914.]
获取到的Y轴刻度值:[1.02 1.04 1.06 1.08 1.1 1.12 1.14 1.16 1.18]
实际图表仅显示两组刻度,未展示上述完整值。


解决方案

核心原因

问题根源在于Matplotlib自动缩放逻辑与日期数据处理冲突,加上数据点数量少(仅5个),导致刻度渲染异常。另外要确认是否导入了matplotlib.dates模块,否则添加的定位器代码不会生效。

修复步骤

  1. 导入必要模块
    在代码开头补充:

    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    
  2. 手动设置轴显示范围
    强制指定X、Y轴范围,避免自动缩放导致刻度丢失:

    # X轴范围设为数据的最小和最大日期
    ax1.set_xlim(data['timestamp'].min(), data['timestamp'].max())
    # Y轴范围在数据最值基础上小幅扩展,保证数据点完整显示
    y_min = data['value'].min() - 0.02
    y_max = data['value'].max() + 0.02
    ax1.set_ylim(y_min, y_max)
    
  3. 调整日期刻度策略
    由于数据日期跨度为2010年1-11月,用MonthLocator作为主刻度更合适,避免YearLocator仅显示单个刻度:

    ax1.xaxis.set_major_locator(mdates.MonthLocator(interval=2))  # 每2个月显示一个主刻度
    ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
    plt.xticks(rotation=45)  # 旋转日期标签,防止重叠
    

完整修复代码

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

fig = plt.figure(figsize=(16,12))
ax1 = fig.add_subplot(1, 1, 1)
ax1.plot(data['timestamp'], data['value'], 'r', label='value')
ax1.set_xlabel('date', fontsize=16)
ax1.set_ylabel('profit', fontsize=16)
ax1.legend(loc='upper left')
ax1.grid(True)

# 设置轴范围
ax1.set_xlim(data['timestamp'].min(), data['timestamp'].max())
y_min = data['value'].min() - 0.02
y_max = data['value'].max() + 0.02
ax1.set_ylim(y_min, y_max)

# 配置日期刻度
ax1.xaxis.set_major_locator(mdates.MonthLocator(interval=2))
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.xticks(rotation=45)

plt.show()

额外检查点

如果问题仍存在,确认data是pandas DataFrame,且timestamp列确实为datetime64[ns]类型,可通过以下代码强制转换:

import pandas as pd
data['timestamp'] = pd.to_datetime(data['timestamp'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:40:26