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

如何在Matplotlib中为X轴设置指定月度日期范围

解决DataFrame累计数据绘图的X轴日期范围与刻度问题

方法一:直接通过Matplotlib调整坐标轴(无需修改DataFrame)

  • 先确保日期列是datetime类型:
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    
    # 转换Date列为datetime格式
    df['Date'] = pd.to_datetime(df['Date'])
    
  • 绘图并设置X轴范围与刻度:
    plt2 = df.plot(x='Date', y=['Total_Sales', 'Total_Cost', 'Profit'], kind='line', linewidth=4)
    
    # 强制X轴显示2022全年范围
    plt2.set_xlim(pd.Timestamp('2022-01-01'), pd.Timestamp('2022-12-31'))
    
    # 设置主刻度为每月第一天,若要隔月显示则改为interval=2
    plt2.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
    # 格式化日期显示格式
    plt2.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
    
    # 旋转刻度标签避免重叠
    plt.xticks(rotation=45)
    plt.tight_layout() # 调整布局防止标签被截断
    plt.show()
    
  • 说明:此方法无需改动原始数据,直接强制X轴覆盖全年范围,用MonthLocator精准控制每月/隔月刻度,解决了你之前用DayLocator(interval=30)因月天数差异导致的日期错位问题。

方法二:补充DataFrame的每月初累计数据后绘图

如果希望DataFrame本身包含全年关键日期的累计数据,可按以下步骤操作:

  • 生成2022年所有月初日期:
    # 生成每月第一天的日期序列
    month_starts = pd.date_range(start='2022-01-01', end='2022-12-31', freq='MS')
    # 转为DataFrame格式
    month_df = pd.DataFrame({'Date': month_starts})
    
  • 合并原始数据与月初日期,并用前向填充补充累计值:
    # 合并数据并按日期排序
    combined_df = pd.concat([df, month_df]).sort_values('Date')
    # 前向填充累计数据(累计值为连续状态,月初值等于上一次交易后的累计值)
    combined_df[['Total_Sales', 'Total_Cost', 'Profit']] = combined_df[['Total_Sales', 'Total_Cost', 'Profit']].ffill()
    
  • 用新的DataFrame绘图,此时X轴自然覆盖全年,再设置刻度:
    plt2 = combined_df.plot(x='Date', y=['Total_Sales', 'Total_Cost', 'Profit'], kind='line', linewidth=4)
    plt2.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
    plt2.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    
  • 说明:此方法让数据本身更完整,后续分析或绘图都能直接使用,适合需要保留全年日期数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:31:04