Matlab:如何通过鼠标单击(使用'ButtonDownFcn')将多个变量点从绘图保存到工作区?

Posted

技术标签:

【中文标题】Matlab:如何通过鼠标单击(使用\'ButtonDownFcn\')将多个变量点从绘图保存到工作区?【英文标题】:Matlab: How to save multiple variable points from mouse click (with 'ButtonDownFcn') from a plot into the workspace?Matlab:如何通过鼠标单击(使用'ButtonDownFcn')将多个变量点从绘图保存到工作区? 【发布时间】:2021-12-31 21:04:38 【问题描述】:

我有一个添加了一些垂直线的图形,例如:

figure
x = rand(1,41);
y = 1:41;
H(1)= plot(x,y,'r.');
H(2)= line([x(21) x(21)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(3)= line([x(3) x(3)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(4)= line([x(15) x(15)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');

我希望能够用鼠标按钮单击行,并存储每个单击的行索引。 以下脚本有效,但我不知道如何将每个索引存储在数组中。每次点击时,“IndInWorkSpace”都会不断变化。

set(H, 'ButtonDownFcn', @LineSelected, H)

function [indices] = LineSelected(ObjectH, H)
   set(ObjectH, 'LineWidth', 4);
   set(H(H ~= ObjectH), 'LineWidth', 2);
   % Get x and y data of the highlighted lines 
   ind = ObjectH.XData
   assignin('base','IndInWorkSpace',ind);
end

任何帮助将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

一个简单的解决方法是首先检查在基础工作区中是否已经找到了索引。如果已经有一个变量IndInWorkSpace,则追加到它,否则分配一个新变量。

function LineSelected(ObjectH, H)
    set(ObjectH, 'LineWidth', 4);
    set(H(H ~= ObjectH), 'LineWidth', 2);
    % Get x and y data of the highlighted lines
    ind = ObjectH.XData;
    if evalin('base','exist(''IndInWorkSpace'',''var'')')
        indArray = evalin('base','IndInWorkSpace');
        indArray(end+1) = ind;
    else 
        indArray = ind;
    end 
    assignin('base', 'IndInWorkSpace', indArray);
end

【讨论】:

谢谢!我试过了,但我得到了这个错误:'参数太多。评估 Line ButtonDownFcn 时出错。' 我通过替换'ind = ObjectH.XData(1);'来修复它在你的代码中。现在可以使用了,谢谢!

以上是关于Matlab:如何通过鼠标单击(使用'ButtonDownFcn')将多个变量点从绘图保存到工作区?的主要内容,如果未能解决你的问题,请参考以下文章

javascript如何屏蔽鼠标双击,或将双击变成单击

matlab没有鼠标怎么操作

MFC中单击button并随鼠标移动怎么实现?

如何将matlab的程序代码导入simulink

如何在c#中实现单击一个按钮后,再在窗体内点击一次鼠标,把该按钮移动到第二次点击的位置?

C# button.image 如何是使用icon格式的图标?如何当点击button时显示多个可选图标??