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

如何在Plotly中限制等高线图范围,仅保留储层形状内区域?

实现等高线图仅显示储层内部区域的方法

核心思路是通过创建储层形状的区域掩码,将储层外部的压力数据标记为无效值(比如NaN),这样绘图工具就会自动忽略外部区域的等高线。下面分常用工具给出具体实现:

Python(Matplotlib)

假设你已经有压力的网格数据和储层边界的坐标数组:

  1. 定义储层闭合路径并生成掩码

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.path import Path
    
    # 替换成你的实际压力网格数据
    x, y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 100))
    pressure = np.sin(x) + np.cos(y)
    
    # 替换成你的储层边界坐标(需闭合:首尾点重合)
    res_x = [2, 6, 8, 4, 2]
    res_y = [3, 1, 7, 5, 3]
    res_path = Path(np.column_stack((res_x, res_y)))
    
    # 判断每个网格点是否在储层内部,生成掩码
    points = np.column_stack((x.ravel(), y.ravel()))
    mask = res_path.contains_points(points).reshape(x.shape)
    
    # 将外部区域的压力数据设为NaN
    pressure_masked = np.where(mask, pressure, np.nan)
    
  2. 绘制掩码后的等高线图

    plt.figure(figsize=(8,6))
    # 仅绘制储层内部的填充等高线
    contour_plot = plt.contourf(x, y, pressure_masked, cmap='viridis')
    # 叠加储层边界折线
    plt.plot(res_x, res_y, color='red', linewidth=2)
    plt.colorbar(contour_plot)
    plt.xlabel('X坐标')
    plt.ylabel('Y坐标')
    plt.title('储层内部压力等高线')
    plt.show()
    

MATLAB

逻辑和Python一致,用inpolygon函数生成掩码:

% 替换成你的实际数据
[x,y] = meshgrid(0:0.1:10, 0:0.1:10);
pressure = sin(x) + cos(y);

% 储层边界坐标(需闭合)
res_x = [2,6,8,4,2];
res_y = [3,1,7,5,3];

% 生成掩码并标记外部数据为NaN
mask = inpolygon(x,y,res_x,res_y);
pressure_masked = pressure;
pressure_masked(~mask) = NaN;

% 绘图
contourf(x,y,pressure_masked);
hold on;
plot(res_x,res_y,'r','LineWidth',2);
colorbar;
xlabel('X坐标');
ylabel('Y坐标');
title('储层内部压力等高线');

通用要点

  • 确保储层边界坐标是闭合的(最后一个点和第一个点坐标相同),否则无法正确生成闭合区域掩码
  • 所有绘图工具的核心逻辑都是:生成区域掩码 → 标记外部数据为无效值 → 基于掩码后的数据绘图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:51