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

如何在Matplotlib中自定义X轴:替换日期为EQ前后天数及标记

自定义Matplotlib时间序列X轴刻度:标记异常点并显示相对天数

核心思路

将日期转换为以异常点(EQ)为基准的相对天数,手动指定X轴的刻度位置与对应标签,把EQ对应的位置替换为"EQ"文本即可实现需求。

步骤与代码实现

1. 预处理数据:计算相对天数

先把日期列转为datetime格式,再计算每个日期与EQ日期的天数差:

import pandas as pd
import matplotlib.pyplot as plt

# 加载并处理数据(替换为你的数据路径和列名)
df = pd.read_csv('temperature_data.csv')
df['date'] = pd.to_datetime(df['date'])

# 定义异常点(EQ)的实际日期,替换为你数据中的对应日期
eq_date = pd.to_datetime('2023-05-12')
# 计算每个日期距离EQ的天数
df['days_from_eq'] = (df['date'] - eq_date).dt.days

2. 绘图并自定义X轴刻度

直接用相对天数作为X轴数据绘图,再手动设置刻度和标签:

plt.figure(figsize=(10, 6))
# 基于相对天数绘制温度时间序列
plt.plot(df['days_from_eq'], df['temperature'], linewidth=1.5)

# 定义目标刻度的相对天数(可根据数据范围调整)
target_ticks = [-25, -20, -15, -10, -5, 0, 5, 10]
# 生成刻度标签:将0(对应EQ)替换为"EQ"文本
tick_labels = [str(day) if day != 0 else 'EQ' for day in target_ticks]

# 设置X轴刻度
plt.xticks(ticks=target_ticks, labels=tick_labels, fontsize=10)
plt.xlabel('Days from EQ', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.title('Temperature Trend Relative to EQ', fontsize=14)
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

3. 直接用原始日期绘图的适配方案

如果已经基于原始日期绘图,需要把目标天数转换为对应日期再设置刻度:

plt.figure(figsize=(10, 6))
plt.plot(df['date'], df['temperature'], linewidth=1.5)

target_ticks = [-25, -20, -15, -10, -5, 0, 5, 10]
# 将相对天数转换为实际日期
tick_dates = [eq_date + pd.Timedelta(days=day) for day in target_ticks]
tick_labels = [str(day) if day != 0 else 'EQ' for day in target_ticks]

plt.xticks(ticks=tick_dates, labels=tick_labels, rotation=45, fontsize=10)
plt.xlabel('Days from EQ', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

注意事项

  • 确保target_ticks中的天数在你的数据覆盖范围内,避免刻度超出绘图区域
  • 若需要灵活适配数据范围,可使用numpy.arange动态生成刻度
  • 旋转日期标签(如示例中的rotation=45)可避免标签重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:50:12