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

如何对齐主次Y轴刻度并调整次Y轴TVD_SCS刻度频率?

解决Matplotlib双Y轴(DEPTH与TVD_SCS_interp)精准对齐问题

核心思路

要实现次Y轴(TVD_SCS_interp)与主Y轴(DEPTH)刻度精准对齐,关键是复用主Y轴的刻度位置,通过插值计算每个DEPTH刻度对应的TVD值,直接替换次Y轴的刻度标签,而非给次Y轴单独设置刻度规则。

完整实现代码

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import pandas as pd
from scipy.interpolate import interp1d

# 示例数据
data = {
    'DEPTH': [100, 120, 140, 160, 180, 200, 220, 240],
    'TVD_SCS_interp': [50.5, 60.2, 70.3, 80.7, 90.2, 100, 100.15, 120.9],
    'Gamma_ray': [150, 150, 120, 130, 140, 130, 110, 100]
}
df = pd.DataFrame(data)

# 建立DEPTH到TVD_SCS_interp的插值函数(处理非连续DEPTH的情况)
depth_to_tvd = interp1d(df['DEPTH'], df['TVD_SCS_interp'], kind='linear', fill_value="extrapolate")

# 创建绘图对象
fig, ax1 = plt.subplots(figsize=(8, 10))
ax2 = ax1.twinx()

# 绘制Gamma_ray vs DEPTH曲线
ax1.plot(df['Gamma_ray'], df['DEPTH'], color="#00be00", label='Gamma Ray')

# 设置主Y轴(DEPTH)的范围和刻度
top_depth = df['DEPTH'].max()
bottom_depth = df['DEPTH'].min()
ax1.set_ylim(top_depth, bottom_depth)  # 钻井数据通常深度从上到下递增,反转Y轴
ax1.yaxis.set_major_locator(ticker.MultipleLocator(10))  # 主刻度间隔10
ax1.yaxis.set_minor_locator(ticker.MultipleLocator(1))   # 次刻度间隔1
ax1.set_ylabel('DEPTH')
ax1.set_xlabel('Gamma Ray')

# 配置次Y轴(TVD_SCS_interp)
# 复用主Y轴的刻度位置,计算对应TVD值
ax1_ticks = ax1.get_yticks()
tvd_ticks = depth_to_tvd(ax1_ticks)

# 设置次Y轴的刻度位置与主Y轴一致,替换为TVD值作为标签
ax2.set_yticks(ax1_ticks)
ax2.set_yticklabels([f'{tvd:.2f}' for tvd in tvd_ticks])
# 同步次Y轴范围与主Y轴(通过插值映射)
ax2.set_ylim(top_depth, bottom_depth)
ax2.set_ylabel('TVD_SCS_interp')

# 添加图例
fig.legend(loc='upper right')
plt.tight_layout()
plt.show()

关键步骤说明

  • 插值函数构建:原始DEPTH数据非10间隔连续,用scipy.interpolate.interp1d构建线性插值函数,确保任意DEPTH值都能匹配对应的TVD_SCS_interp值。
  • 主Y轴刻度控制:通过MultipleLocator(10)设置DEPTH轴的主刻度间隔为10,满足刻度频率要求。
  • 次Y轴刻度复用:直接复用主Y轴的刻度位置,避免次Y轴自动生成错位刻度,保证位置完全对齐。
  • 标签替换:用插值函数计算每个主刻度位置对应的TVD值,替换次Y轴的刻度标签,实现数值与主轴位置精准对应。

内容的提问来源于stack exchange,提问作者Mahammad Ojagzada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:53:26