如何在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
相关产品推荐
相关产品推荐

