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

Python实现同刻度、对齐Y轴零点的不同尺寸子图

Python实现同刻度、对齐Y轴零点的不同尺寸子图

嘿,我明白你想要实现的效果了——把不同海拔的钻井数据子图和主图Y轴对齐,保持相同刻度,还得是不同尺寸的布局对吧?这其实用Matplotlib的GridSpec配合轴共享就能搞定,我给你捋个具体的实现思路和代码示例:

核心思路

  • 用GridSpec自定义子图的布局比例,让主图占据更大空间,三个子图按需求分配不同尺寸
  • 让所有子图共享主图的Y轴,确保刻度完全一致,同时强制Y轴零点对齐
  • 手动统一所有子图的Y轴范围,避免因数据范围不同导致的偏移

代码示例

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import numpy as np

# 模拟钻井数据
# 主图数据
main_y = np.linspace(-500, 300, 100)
main_x = np.random.randn(100).cumsum()

# 子图数据(不同海拔区间)
sub1_y = np.linspace(100, 300, 50)
sub1_x = np.random.randn(50).cumsum()

sub2_y = np.linspace(-200, 100, 60)
sub2_x = np.random.randn(60).cumsum()

sub3_y = np.linspace(-500, -100, 70)
sub3_x = np.random.randn(70).cumsum()

# 创建画布和GridSpec布局
fig = plt.figure(figsize=(10, 8))
# 定义GridSpec:4行1列,高度比例分别为主图、子图1、子图2、子图3的比例
gs = GridSpec(4, 1, height_ratios=[4, 1, 1, 1], hspace=0.1)

# 创建主图,作为Y轴共享的基准
main_ax = fig.add_subplot(gs[0])
main_ax.plot(main_x, main_y)
main_ax.set_ylabel('海拔(m)')
main_ax.set_title('钻井数据对比')

# 创建子图1,共享主图的Y轴
sub1_ax = fig.add_subplot(gs[1], sharey=main_ax)
sub1_ax.plot(sub1_x, sub1_y, color='orange')
# 隐藏子图的Y轴刻度,避免重复显示
plt.setp(sub1_ax.get_yticklabels(), visible=False)

# 创建子图2,共享主图的Y轴
sub2_ax = fig.add_subplot(gs[2], sharey=main_ax)
sub2_ax.plot(sub2_x, sub2_y, color='green')
plt.setp(sub2_ax.get_yticklabels(), visible=False)

# 创建子图3,共享主图的Y轴
sub3_ax = fig.add_subplot(gs[3], sharey=main_ax)
sub3_ax.plot(sub3_x, sub3_y, color='red')

# 强制所有子图的Y轴范围和主图一致,确保零点对齐
all_axes = [main_ax, sub1_ax, sub2_ax, sub3_ax]
for ax in all_axes:
    ax.set_ylim(main_ax.get_ylim())

plt.tight_layout()
plt.show()

关键细节说明

  • height_ratios参数可以灵活调整每个子图的高度,你可以根据自己的需求修改比例数值
  • sharey=main_ax让所有子图共享主图的Y轴刻度,这样刻度会自动同步,零点自然对齐
  • 隐藏子图的Y轴刻度是为了避免重复显示,让布局更整洁
  • 手动设置ylim是为了确保即使子图数据范围较小,也会和主图保持完全一致的Y轴范围,不会出现偏移

你之前用GridSpec没成功,大概率是没处理好轴共享和Y轴范围的统一,试试这个方法应该能解决问题。如果需要更灵活的横向布局,也可以调整GridSpec的行列设置,核心逻辑都是一样的。

备注:内容来源于stack exchange,提问作者Geologist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:13:08