2012-05-22 163 views
1

我正在製作一個簡單的Matlab交互式繪圖儀。我做的很簡單: 我使用命令:如何在matlab數據中對數據對象進行分組

[x,y] = ginput(1) 

到針點的位置(X,Y)。然後,我使用這個點作爲種子點來繪製一條曲線,並且我還在繪製曲線的頂部添加了一些箭頭(它們顯示了方向)。

現在我的問題是: 當我完成這個圖後,我希望能夠通過一次點擊來選擇(並且例如刪除)單個曲線和ITS對應的箭頭。

問題是那些箭頭和曲線不是同一個對象的一部分,這就是爲什麼Matlab只會根據選擇哪個/哪個來刪除曲線或箭頭。

縮小範圍,我知道曲線和箭頭確實有單獨的對象處理程序。 改寫我的問題: 有沒有辦法,我可以將這兩個單獨的處理程序分組,或者,例如,使原始曲線的子箭頭?

回答

1

那麼你可以用不同的方式來解決這個問題。

首先有關存儲的信息:

  • 最乾淨的是,如果你將與classdef編寫自己的類來保存你的對象,有類handles可以延長用於上述目的。或者,您可以將它們存儲在所有圖形對象的userdata字段中。

  • 關於選擇和刪除 - 行可以分別與ButtonDownFcnDeleteFcn。第一個可以用來突出顯示相關行,第二個可以刪除相關行。

+0

謝謝。我想我找到了解決辦法。但我希望如果有一個簡單的解決方案。 – MomoPP

2

您可以使用tag屬性對圖中的元素進行分組。例如,使用

hold on;  
plot(x, y, 'tag', 'group1'); 
plot(x2, y2, 'tag', 'group1'); 

plot(x3, y3, 'tag', 'group2'); 
plot(x4, y4, 'tag', 'group2'); 

之後,您可以通過

h = findall(0, 'tag', 'group1'); 

選擇屬於第一組的所有元素,並用

delete(h); 

刪除正如意見中的要求由OP,這裏是一個解決方案,允許交互式按組刪除數據點:

plot(x, y, 'tag', 'group1', 'buttondownfcn', @(obj, evt) delete(findall(gca, 'tag', 'group1'))) 
    plot(x2, y2, 'tag', 'group2', 'buttondownfcn', @(obj, evt) delete(findall(gca, 'tag', 'group2'))) 

如果您現在單擊一個數據點,屬於同一組的所有點將被刪除。

+0

這是一個不錯的訣竅。謝謝。我只是想知道是否可以通過鼠標點擊交互式完成刪除部分。 – MomoPP

+0

@MomoPP:是的,這是可能的。請看我更新的答案。 –

相關問題