2012-04-20 144 views
3

在Matlab中2011B,我有一个多维矩阵将被最初呈现为它的尺寸为2的2D图。我希望用鼠标左键点击标记。点击标记绘制一个由点击值切分的其他维度的新数字。制作点击MATLAB情节标记情节子图

这个问题是关系到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)'); 

由于有在主图表许多标记,是有可能只需将一个处理程序附加到整个曲线上,并使用索引(优选)或点击标记的坐标调用子图绘图函数?

回答

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)探索您的GET选项。

+0

感谢。虽然您的示例显示了如何获得3D数据的2D片段,但我更感兴趣的是获取单击的2D图形标记的索引。例如,在下面修改您的代码,单击任何标记打印相同的XData和YData。我想获得点击标记的索引(1,2,3等)。 function main data = peaks; H =情节(1:大小(数据,2),数据(1,:), '邻'); 集(H, 'buttondownfcn',@hitme) 结束 功能hitme(gcbo,evendata) GET(gcbo, '扩展数据') GET(gcbo, 'YDATA') 结束 – Gnubie 2012-04-24 12:50:23

+0

如果你想要的是点,添加'pt = get(gca,'CurrentPoint');',如上所示。它会给你一个3D点,所以根据你的需要,只需使用第一行。 – Rasman 2012-04-24 13:42:14

+0

非常感谢!它给我的是坐标,而不是标记的索引,但是由于我知道原始矩阵,我可以从x坐标计算索引,例如,圆(pt(1))。 – Gnubie 2012-04-25 16:18:54