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

时间:2015-04-14 19:44:35

标签: matlab matlab-figure contour shapefile

我绘制了一组轮廓线,并在其上绘制了一个shapefile,其地图形状与找到的here类似。

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)上定义的,所以它看起来并不好看。

有什么方法可以剪切/修剪/隐藏超出地图限制的轮廓线,使地图中包含所有轮廓线?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用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]);

或者您可能会发现clipping的{​​{1}}选项已足够。

更新:上面会将轮廓图剪切到shapefile的边界框,但是如果你想让轮廓只显示在形状内部,那么它就会变得更加复杂。您需要创建一个大小与所需轴限制相关的矩形块,并在形状数据中间定义一个孔。

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

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'); 以匹配您的情节背景。

如果您没有映射工具箱,则可能需要手动制作补丁。还有其他涉及alpha蒙版的技巧,但它们可以处理图像数据而不是图形。