2015-04-14 82 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

謝謝,我會嘗試。 –