Python使用matplotlib将时分秒格式时间绘制在倒置Y轴的实现方法
Matplotlib绘制油田测井曲线Y轴时间格式修正方案
问题定位
现有代码的核心问题出在两部分:时间格式反复转换导致matplotlib无法识别时间轴、Y轴范围硬编码为年份区间不符合需求。
修正步骤
1. 时间预处理逻辑优化
删除冗余的时间转换代码,统一保留datetime类型方便matplotlib识别:
# 导入库(已去重) import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # 读取数据+时间处理 df = pd.read_csv('EDR_data.csv', sep=',', header=0) df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M:%S')
2. Y轴参数替换
删除原来写死的ax1.set_ylim(2019, 2020)和自定义的时间格式化函数,替换为matplotlib原生的时间轴配置:
# 计算数据时间范围,也可手动指定为你需要的6小时区间 time_start = df['Time'].min() time_end = df['Time'].max() # 子图公共配置部分修改为以下内容 for i, ax in enumerate(fig.axes): # 倒置Y轴+设置时间范围,因为测井曲线时间从上到下递增,所以范围是大值到小值 ax.set_ylim(time_end, time_start) # Y轴刻度配置:主刻度30分钟间隔,次刻度1秒间隔 ax.yaxis.set_major_locator(mdates.MinuteLocator(interval=30)) ax.yaxis.set_minor_locator(mdates.SecondLocator(interval=1)) # Y轴标签仅显示时分秒 ax.yaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S')) # 原有X轴配置保留不变 ax.xaxis.set_ticks_position("top") ax.xaxis.set_label_position("top") ax.set_xlabel(curve_names[i]) if i == 3: ax.spines["top"].set_position(("axes", 1)) else: ax.grid()
3. 冗余代码清理
- 注意不要将Time列转换为time对象,必须保留datetime类型才能被matplotlib时间轴识别
- 删除代码末尾的
df['Time']=pd.to_datetime(df['Time'],format='%H:%M:%S').dt.time,转换为time对象会导致时间轴失效 - 删除重复导入的库(重复的datetime、matplotlib.pyplot导入语句)
- 删除原来自定义的
formatter_yx1相关代码,已用原生方法替代
效果验证
运行修改后代码会生成倒置的时间Y轴,从上到下时间递增,主刻度每30分钟显示一次HH:MM:SS格式的标签,次刻度每1秒显示刻度线,符合测井曲线的绘制标准。
内容的提问来源于stack exchange,提问作者Nana Kay
相关产品推荐
相关产品推荐

