如何用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
额外说明
- 如果
gcoord不是闭合的边界点序列,需要先将其整理为按顺时针/逆时针排列的闭合多边形(首尾点重合),否则inpolygon无法正确判断区域 - 插值方法
'v4'是Matlab传统的不规则数据插值算法,对边界的拟合效果较好;如果你的数据有较多噪声,也可以尝试'natural'自然邻域插值 - 如果需要更精细的边界控制,可以先对
gcoord的边界进行平滑处理后再生成掩码
内容的提问来源于stack exchange,提问作者novice
相关产品推荐
相关产品推荐

