在Matlab中修剪地图上的等高线



我绘制了一组轮廓线,并在它们上面绘制了一个形状文件,其地图形状与这里的相似。

F = TriScatteredInterp(x,y,z);
[qx, qy] = meshgrid(1:.01:10,1:.01:10); 
qz = F(qx, qy);
contour(qx, qy, qz, 10); hold on; 
plot([shp.X],[shp.Y],'k'); axis equal

然而,由于countour是在地图(shapefile)限制之外的正方形区域上定义的,所以看起来不太好。

有没有什么方法可以剪切/修剪/隐藏地图范围之外的等高线,使所有等高线都包含在地图中?

谢谢!

您可以使用axis关键字来约束等高线图的限制。如果你从形状数据中得到这些限制,这应该可以让你根据需要裁剪图像:

xmin = min(min(shp.X)); xmax = max(max(shp.X);
ymin = min(min(shp.Y)); ymax = max(max(shp.Y));
axis([xmin, xmax, ymin, ymax]);

或者,您可能会发现contourclipping选项就足够了。

更新:上面将把轮廓图剪辑到形状文件的边界框中,但如果你想让轮廓只显示在形状本身内部,那就有点复杂了。您需要创建一个矩形面片,其大小为所需的轴限制,中间有一个由形状数据定义的孔。

如果您有映射工具箱,至少考虑到问题的性质,这是可能的,那么您可以使用poly2fv。你可以制作两个多边形,一个是你的绘图范围的大小

x1 = [xmin xmin xmax xmax xmin];
y1 = [ymin ymax ymax ymin ymin];

和另一个由形状数据定义,然后转换为面和顶点

[f, v] = poly2fv({x1, x2}, {y1, y2});

然后用补丁绘图

patch('Faces', f', 'Vertices', v, 'FaceColor', 'w'); 

您可以在其中更改FaceColor以匹配您的绘图背景。

如果你没有映射工具箱,那么你可能不得不手工制作补丁。还有其他涉及alpha遮罩的技巧,但它们适用于图像数据,而不是绘图。

最新更新