如何在Plotly中限制等高线图范围,仅保留储层形状内区域?
实现等高线图仅显示储层内部区域的方法
核心思路是通过创建储层形状的区域掩码,将储层外部的压力数据标记为无效值(比如NaN),这样绘图工具就会自动忽略外部区域的等高线。下面分常用工具给出具体实现:
Python(Matplotlib)
假设你已经有压力的网格数据和储层边界的坐标数组:
定义储层闭合路径并生成掩码
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)绘制掩码后的等高线图
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
相关产品推荐
相关产品推荐

