如何在Matlab中给imagesc绘制的图像叠加shapefile多边形轮廓?
Matlab叠加shapefile轮廓到imagesc图像的实现方法
你只需要在原有代码基础上增加hold on保持坐标轴,并修改mapshow的显示参数即可实现需求,完整修改后的代码如下:
figure, imAlpha=ones(size(albedo)); imAlpha(isnan(albedo))=0; imagesc(x,y,albedo,'AlphaData',imAlpha); h = colorbar; ylabel(h, 'Surface albedo \alpha (-)') set(gca,'Ydir','normal'); set(gca,'color','w'); title('Surface albedo \alpha') xlabel('X coordinate (m)') ylabel('Y coordinate (m)'); set(gca,'FontSize',14); set(gcf,'color','w'); % 新增部分:叠加冰川轮廓 hold on outline = shaperead('Glacier_outline_2020_2D.shp'); % 设置填充透明,仅显示轮廓线 mapshow(outline, 'FaceColor', 'none', 'EdgeColor', 'r', 'LineWidth', 2); hold off
关键参数说明
hold on:锁定当前坐标轴,保证后续绘制的轮廓不会覆盖已生成的反照率图像FaceColor设置为none:完全关闭多边形的填充效果,填充区域100%透明EdgeColor:可自定义轮廓线颜色,示例用的是红色r,你可以根据图像配色替换为黑色k、蓝色b等其他颜色LineWidth:调整轮廓线的粗细,避免轮廓被底层的反照率图像遮挡
如果你需要更灵活的控制轮廓样式,也可以直接提取shapefile的坐标用plot函数绘制,效果完全一致:
hold on outline = shaperead('Glacier_outline_2020_2D.shp'); x_out = [outline.X]; y_out = [outline.Y]; plot(x_out, y_out, 'r', 'LineWidth',2) hold off
注意:请确保你shapefile的坐标系和反照率矩阵所用的x/y坐标系完全一致,否则会出现轮廓和图像错位的问题,若坐标系不一致需要先做坐标配准转换。
内容的提问来源于stack exchange,提问作者user5618251
相关产品推荐
相关产品推荐

