1

我正在用 Matlab 制作一个简单的交互式绘图仪。我所做的很简单:我使用命令:

[x,y] = ginput(1)

精确定位位置 (x,y)。然后,我使用这个点作为种子点来绘制曲线,并在绘制曲线的顶部添加一些箭头(显示方向)。

现在我的问题是:在我完成图之后,我希望能够通过单击来选择(例如删除)一条曲线及其对应的箭头。

问题是这些箭头和曲线不是同一个对象的一部分,这就是为什么 Matlab 只会删除曲线或箭头,这取决于选择了/被选择的一个。

缩小范围,我知道曲线和箭头确实有单独的对象处理程序。改写我的问题:无论如何我可以将这两个单独的处理程序组合在一起,或者例如,使箭头成为原始曲线的子级?

4

2 回答 2

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')))

如果您现在单击一个数据点,则属于同一组的所有点都将被删除。

于 2012-05-22T10:20:30.520 回答
1

Well you can approach this problem in different ways.

First about storing the informations:

  • Most cleanly would be if you would write your own classes with classdef to hold your objects, there is the class handles you can extend for such purposes. Alternatively you could store them in the userdata fields of all graphic objects.

  • about the selection and deletion - lines can be assosiciated with a ButtonDownFcn and DeleteFcn. The first can be used to highlight the related lines, the second to delete the related ones.

于 2012-05-22T09:34:10.167 回答