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

如何用Matlab绘制不规则图形的等高线图?代码修改求助

解决Matlab绘制不规则区域等高线图的问题

你的问题核心是当前代码用meshgrid生成了矩形网格,插值后会覆盖整个矩形范围,导致等高线图是矩形而非你需要的不规则形状。以下是针对性的修改方案:

关键修改步骤

  • 利用inpolygon函数判断网格点是否在你的不规则区域边界内,生成掩码(Mask)
  • 将掩码外的插值结果设为NaN,让contourf只渲染区域内的部分
  • 可选:调整插值方法提升不规则区域的插值精度

修改后的完整代码

figure(11)
% 1. 生成原始网格
[xq,yq] = meshgrid(0:0.1:225, 0:0.1:40);
% 2. 判断网格点是否在gcoord定义的不规则区域内(假设gcoord是按顺序排列的边界点)
in_region = inpolygon(xq, yq, gcoord(:,1), gcoord(:,2));
% 3. 插值,可选指定更适合不规则区域的方法(比如'v4'或'natural')
vq = griddata(gcoord(:,1),gcoord(:,2),uw,xq,yq,'v4');
% 4. 将区域外的插值结果设为NaN,避免渲染
vq(~in_region) = NaN;
% 5. 绘制等高线
contourf(xq,yq,vq,'ShowText','on','LineStyle','-')
% 后续标注、样式设置保持不变
xlabel('Distance(m)','FontName','Times New Roman','FontSize',12,'FontWeight','bold');
ylabel('Elevation(m)','FontName','Times New Roman','FontSize',12,'FontWeight','bold');
set(gca,'FontName','Times New Roman','FontSize',12,'FontWeight','bold');
colorbar
colormap jet
hr=colorbar;
set(get(hr,'Title'),'string','kPa');
box off

额外说明

  1. 如果gcoord不是闭合的边界点序列,需要先将其整理为按顺时针/逆时针排列的闭合多边形(首尾点重合),否则inpolygon无法正确判断区域
  2. 插值方法'v4'是Matlab传统的不规则数据插值算法,对边界的拟合效果较好;如果你的数据有较多噪声,也可以尝试'natural'自然邻域插值
  3. 如果需要更精细的边界控制,可以先对gcoord的边界进行平滑处理后再生成掩码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:19