2012-05-22 166 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:是的,这是可能的。请看我更新的答案。 –

相关问题