【问题标题】:changing plot manually手动更改绘图
【发布时间】:2012-11-08 03:34:08
【问题描述】:

我正在尝试通过这个链接实现一些东西-

http://blogs.mathworks.com/pick/2008/05/27/advanced-matlab-capture-mouse-movement/

在更复杂的图形界面中.. 我绘制了一条曲线,并使用寻峰器功能找到了图中的所有最大值,并用 X 标记它们(使用另一个绘图功能)但我希望用户如果它们是错误的,可以更正最大值的位置,或者如果它们是不必要的,则可以删除一些 X。

我不明白我应该更改或添加什么以使其在每个步骤中仅拖动某个 X。

在这段代码中它不是 gui,但我仍然遇到同样的问题

我的代码-

function main

global data_file

x=0:0.1:100
data_file=sin(x)*5+(rand(100*10+1,1)’-0.5)

starting_sample= 1;
sampling_rate=1;

len = length(data_file);

f = figure('NumberTitle','off','color','w','Menubar','none');

[picks1,locs1] = findpeaks(data_file(starting_sample:sampling_rate:len),'MINPEAKDISTANCE',10);
a = axes('xlim',[0 100], 'ylim',[-5 5]);

plot( 1:sampling_rate:len, data_file( starting_sample:sampling_rate:len ) );
hold on
p=plot(locs1,picks1,'x','linewidth',2,'color','r','ButtonDownFcn',@start_drag1);
hold off

set(f,'WindowButtonUpFcn',@stop_drag1)

    function start_drag1(varargin)
        set(f,'WindowButtonMotionFcn',@draging)
    end

    function draging(varargin)
        pt= get(a,'currentpoint')
        set(p,'XData',pt(1)*[1 1])
    end

    function stop_drag1(varargin)
        set(f,'WindowButtonMotionFcn','')
    end
end

【问题讨论】:

    标签: matlab user-interface plot mouseevent


    【解决方案1】:

    如果您想指定可以拖动的最小/最大步长,则需要编辑 draging 函数,以便在超过某个拖动阈值后增量更新 XData

    这样的事情可能会奏效

    function draging(varargin)
    
       dragDist = 1;
       pt = get(a,'currentpoint')
       curX = get(p,'XData')
    
       if ( curX(1) - pt(1) > dragDist) %drag to the left
          set(p,'XData',curX - dragDist)
       elseif (pt(1) - curX(1) > dragDist) % drag to the right
          set(p, 'XData', curX + dragDist)
       end
    
    end
    

    【讨论】:

    • 您的答案中缺少两件事-1.当它拖动时-它拖动所有Xes,我希望它只拖动一个并将其他Xes留在原处.. 2.它会改变只向侧面而不是向上\向下。你能添加那些东西吗?
    • @user1742463 缺少什么?
    猜你喜欢
    • 2021-02-03
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2017-03-10
    • 2017-12-11
    • 2011-01-04
    相关资源
    最近更新 更多