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

如何基于3D矩阵绘制多边形区域内的多幅数值可视化图

嘿,我明白你的需求了——你现在有12个月的网格化数据,想在指定多边形S里用颜色体现每个网格的数值(0-100),而不是只画一堆红点对吧?之前的代码只能标记点,没法展示数值,那咱们来改改,用伪彩色图实现这个需求,步骤很清晰:

第一步:先搞定多边形区域的掩膜

首先我们需要生成一个和数据网格匹配的掩膜,把多边形外的区域标记出来,之后把这些区域的数据设为NaN,这样绘图时就只会显示多边形内的部分:

S = shaperead(polygon); 
[X,Y] = meshgrid(lon,lat); 
data = test; % 你的420×940×12数据矩阵

% 初始化掩膜:先设为全false,之后把多边形内的位置设为true
mask = false(size(X));
N = length(S); 
for k = 1:N 
    idx = insidepoly(X(:),Y(:),S(k).X,S(k).Y); 
    mask(idx) = true; % 把每个多边形覆盖的网格标记为有效区域
end

% 给12个月的数据都加上掩膜:多边形外的数据设为NaN
data_masked = NaN(size(data));
for m = 1:12
    data_masked(:,:,m) = data(:,:,m) .* mask; % 利用逻辑索引,无效区域置NaN
end

第二步:绘制12个月的数值可视化图

接下来我们用pcolor(伪彩色图)来展示每个网格的数值,把12幅图排列在一个窗口里方便对比:

% 创建一个大窗口,方便排列12幅图
figure('Position', [100 100 1200 800]); 

for m = 1:12
    subplot(3,4,m); % 3行4列布局,每个子图对应一个月
    pcolor(X, Y, data_masked(:,:,m)); % 绘制伪彩色图,X/Y对应经纬度
    shading flat; % 去掉网格线,让颜色块更平滑美观
    colorbar; % 显示颜色条,对应0-100的数值范围
    caxis([0 100]); % 固定所有图的颜色范围,保证月份间的数值对比公平
    title(sprintf('%d月数据', m)); % 给每个子图加月份标题
    xlabel('经度');
    ylabel('纬度');
    axis equal; % 保持经纬度的比例,避免地图变形
end

一些可选的优化小技巧

  • 如果你觉得pcolor的色块不够平滑,可以换成contourf(X,Y,data_masked(:,:,m),20),用填充等高线的方式展示数值;
  • 如果你的经纬度是地理坐标系,想要更专业的地图底图,可以搭配geoshow函数,但需要先处理投影信息;
  • 要是想每个月份单独弹出窗口,把subplot(3,4,m)换成figure就行,不过12个窗口可能有点占屏幕。

这样改完之后,每个月份的图都会清晰展示多边形内每个网格的数值大小,颜色深浅对应数值高低,完全满足你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:52:05