点击MATLAB绘图标记使子图绘制。

3
在Matlab 2011b中,我有一个多维矩阵,最初要作为其2个维度的2D图表呈现。我希望用左鼠标按钮使标记可点击。单击标记会绘制一个新图,其中包含由所点击值分割的其他维度。
这个问题涉及到 Matlab: Plot points and make them clickable to display informations about it,但我想运行一个脚本,而不仅仅是弹出有关所单击点的数据。
谷歌搜索提示可以使用ButtonDownFcn,但我发现的示例需要手动绘制每个点并附加处理程序,如下所示:
hp = plot(x(1), y(1), 'o');
set(hp, 'buttondownfcn', 'disp(1)');

由于主图中有许多标记,是否可能只附加一个处理程序到整个曲线,并通过点击的标记的索引(最好)或坐标来调用子图绘制函数?
1个回答

3
这是您需要的一个想法,如果我理解您的要求的话,它应该能帮助您入门。在这种情况下,当您选择一条曲线时,它将在底部子图中绘制它,并保留颜色。
function main
subplot(211)
h = plot (peaks);

set (h,'buttondownfcn', @hitme)
end

function hitme(gcbo,evendata)
subplot (212)
hold on;

col = get (gcbo,'Color');
h2 =  plot (get (gcbo,'XData'),get (gcbo,'YData'));
set (h2,'Color', col)

pt = get (gca, 'CurrentPoint');
disp (pt);
end

您可以在hitme函数中简单地编写get(gcbo)来探索获取选项的可能性。


谢谢。虽然您的示例展示了如何获取3D数据的2D切片,但我更感兴趣的是获取我单击的2D图形标记的索引。例如,修改下面的代码,单击任何标记都会打印相同的XData和YData。我想要获取单击的标记的索引(1、2、3等)。 函数主 数据=峰值; h=plot(1:size(data,2),data(1,:),'o-'); set(h,'buttondownfcn',@hitme) 结束函数hitme(gcbo,evendata) get(gcbo,'XData') get(gcbo,'YData') 结束 - Gnubie
如果你只需要这个点,可以添加 pt = get(gca, 'CurrentPoint');,如上所示。它会给你一个三维点,所以根据你的需求,只需使用第一行即可。 - Rasman
非常感谢!它给了我标记的坐标,而不是索引,但由于我知道原始矩阵,我可以从x坐标计算出索引,例如round(pt(1))。 - Gnubie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接