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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:24:02