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

Matplotlib中如何删除坐标轴原有刻度标签并设置自定义特定标签?

问题描述

我需要在特定刻度位置设置自定义刻度标签,同时删除坐标轴上的原有标签。具体来说,绘制股票收盘价走势图时,x轴显示的是每日日期标签,希望将其删除,替换为每个月对应的标签。尝试删除所有刻度标签并设置新的标签列表,但无法将新标签放置在期望的位置。

数据

DateOpenHighLowClose/PriceVolume
6/24/201986.7887.1186.0686.551507828
6/25/201986.6387.2384.8185.062481284
6/26/201985.3885.8184.7585.332034693
6/27/201985.6586.8685.1386.431394847
6/28/201986.6687.7486.6687.553025379
7/1/201988.8489.7287.7788.454017249
7/2/201989.219087.9588.872237183
7/3/201989.1491.0889.1490.671647124

原代码

import pandas as pd
import matplotlib.pyplot as plt

def main():
    df = pd.read_excel('DatosUnited.xlsx')
    date = df['Date']
    closePrice = df['Close/Price']
    
    plt.xlabel('Tiempo')
    plt.ylabel('Valor de las acciones (USD) ')
    plt.title('Este mes')
    plt.plot(date, closePrice, 'r')
    plt.show()

main()
解决方案

核心思路是将日期转为可识别的datetime类型,利用Matplotlib的日期定位器和格式化工具,自动或手动指定每月刻度位置并替换标签,同时隐藏原有每日刻度。

自动适配每月刻度的修改代码

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, DateFormatter

def main():
    df = pd.read_excel('DatosUnited.xlsx')
    # 将字符串日期转为datetime类型,支持Matplotlib日期处理
    df['Date'] = pd.to_datetime(df['Date'])
    date = df['Date']
    closePrice = df['Close/Price']
    
    plt.xlabel('Tiempo')
    plt.ylabel('Valor de las acciones (USD) ')
    plt.title('Este mes')
    plt.plot(date, closePrice, 'r')
    
    # 获取当前坐标轴对象
    ax = plt.gca()
    # 设置x轴主刻度为每月第一天
    ax.xaxis.set_major_locator(MonthLocator())
    # 设置刻度标签格式为「缩写月份+年份」,如"Jun 2019"
    ax.xaxis.set_major_formatter(DateFormatter('%b %Y'))
    # 隐藏默认的每日次要刻度
    ax.xaxis.set_minor_locator(plt.NullLocator())
    
    # 调整标签角度避免重叠,自动优化布局防止标签截断
    plt.xticks(rotation=45)
    plt.tight_layout()
    
    plt.show()

main()

手动指定刻度位置的方案(可选)

如果需要自定义刻度位置(比如不是每月第一天),可以手动筛选目标日期的索引:

import pandas as pd
import matplotlib.pyplot as plt

def main():
    df = pd.read_excel('DatosUnited.xlsx')
    df['Date'] = pd.to_datetime(df['Date'])
    date = df['Date']
    closePrice = df['Close/Price']
    
    plt.xlabel('Tiempo')
    plt.ylabel('Valor de las acciones (USD) ')
    plt.title('Este mes')
    plt.plot(date, closePrice, 'r')
    
    ax = plt.gca()
    # 手动筛选需要作为刻度的日期(示例:每月最后一天)
    month_ends = df[df['Date'].dt.is_month_end].index
    # 设置刻度位置为筛选出的日期
    ax.set_xticks(df['Date'].iloc[month_ends])
    # 设置对应的标签格式
    ax.set_xticklabels(df['Date'].iloc[month_ends].dt.strftime('%b %Y'))
    
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

main()

关键步骤说明

  • 日期类型转换:pd.to_datetime()是基础,确保Matplotlib能正确解析日期并处理刻度。
  • 刻度定位与格式化:MonthLocator()自动识别每月起始点,DateFormatter()可自定义标签格式(如'%Y-%m'表示「年-月」)。
  • 隐藏冗余刻度:NullLocator()移除默认的每日小刻度,只保留需要的月度刻度。
  • 布局优化:rotation和tight_layout()解决标签重叠、截断问题,提升图表可读性。

内容的提问来源于stack exchange,提问作者Adrián Desentis Flores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:05:28