2015-04-14 52 views
2

我绘制了一组轮廓线并在其上绘制了一个地图形状类似于here的地图形状的shapefile。在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 

但是,由于count是在超出地图极限的shape区域(shapefile)上定义的,所以它看起来不太好。

有什么办法,我可以剪切/装饰/隐藏落在地图的范围之外的轮廓线都包含在地图中的轮廓线?

谢谢!

回答

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选项contour就足够了。

UPDATE:以上就会被裁剪的等高线图,以shape文件的边界框,但如果你想轮廓显示出来里面只有本身的形状,然后它是一个触摸更复杂。您需要创建一个矩形的贴片,其大小与您的形状数据所定义的中间的孔相符。

如果你有映射工具箱,它至少可以给你的问题的性质,那么你可以使用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蒙版的技巧,但它们处理图像数据而不是绘图。

+0

如果shapefile是矩形的,不会工作吗? –

+0

啊我想我明白了:原始答案只会隐藏形状边界框外的轮廓,但是您希望将轮廓线隐藏在形状轮廓之外。结果很难,我已经更新了答案。 – xenoclast

+0

谢谢,我会尝试。 –