Why after plotting on axes the ButtonDownFcn doesn't work?
27 次查看(过去 30 天)
显示 更早的评论
Hi,
I have a GUI with 3 axes. Before plotting the data the three functions axesX_ButtonDownFcn(...) work, but when I plot the data they don't work anymore.
I have tried this but doesn't work:
axes(handles.plot1);
handles.cursorPlot1 = plot(handles.simulation_data_temp(8,:), 'Parent',...
handles.axes1, 'HitTest', 'off', 'ButtonDownFcn', '');
What I am doing wrong?
Thanks.
2 个评论
Bing
2017-4-16
You should do this:
% code
set(handles.plot1,'NextPlot','new');
cla(handles.plot1);
axes(handles.plot1);
handles.cursorPlot1 = plot(handles.simulation_data_temp(8,:), 'Parent',...
handles.axes1, 'HitTest', 'off');
David Willis
2017-8-4
For simple folks like me, all you need is this. I created a button and an axes. When I press the button it plots a sinewave on the axes. When I click in the axes window, the coordinates are displayed.
function pushbutton1_Callback(hObject, eventdata, handles)
%pushbutton callback function
x = 0:100;
y = sin(2*pi*x/20);
set(handles.axes1, 'nextPlot','new'); %this is the key!
axes(handles.axes1);
plot(x,y);
% ButtonDown callback for axes1
function axes1_ButtonDownFcn(hObject, eventdata, handles)
coord = get(hObject, 'CurrentPoint') %No semicolon so it is displayed
pts = coord(1,1:2)
采纳的回答
Matt Fig
2012-11-29
编辑:Matt Fig
2012-11-29
>> AxesH = axes('ButtonDownFcn', 'disp(''Axes click!'')');
Axes click!
Axes click!
>> plot(1:10) % Now clicking does nothing....
No more 'Axes click!', but now try this:
>> clear all,close all
>> AxesH = axes('ButtonDownFcn', 'disp(''Axes click!'')');
Axes click!
>> hold all
>> plot(1:10)
Axes click!
Axes click!
Basically, when you plot on an axes that has the nextplot property set to replace, all callbacks, etc are reset in that call.
2 个评论
Jan
2012-11-29
Fine, Matt! I've seen this for image(), but did not assume that this happens for plot() also. But why did I not see this in my test code?? For testing of a foreign toolbox I've added this in matlabrc.m:
set(0, 'DefaultAxesNextPlot', 'add')
Afterwards I cleanup startup.m. This worked for month now, because in my own programs I use the faster low-level functions like line().
更多回答(3 个)
Deep Desai
2014-6-25
编辑:Deep Desai
2014-6-25
Jan, would I be expected to do the same incase I was using a function and not displaying a text.
My code;
set(handles.threat,'HitTest','off');
set(handles.threat, 'ButtonDownFcn', {@threat_ButtonDownFcn,handles});
hold all
scatter(handles.threat,green_distance, gGreenTime,'g*');
function threat_ButtonDownFcn(hObject, eventdata, handles)
P = get(handles.threat,'CurrentPoint');
Thanks again mate.
0 个评论
Jan
2012-11-29
编辑:Jan
2012-11-29
You set the ButtonDownFcn explicitly to the empty string. What kind of processing do you expect afterwards?
[EDITED]
AxesH = axes('ButtonDownFcn', 'disp(''Axes click!'')');
Plot1 = plot(1:10, 'Parent', AxesH, 'HitTest', 'off', 'ButtonDownFcn', '');
Now clicking on the axes still works. Please test this. And now find out, where in your code the ButtonDownFcn is overwritten. And/or set a breakpoint in the ButtonDownFcn to find out, if it is still called, but any other error occurres.
4 个评论
Image Analyst
2012-11-29
For the Mathworks view on this: http://www.mathworks.com/support/solutions/en/data/1-1B03X/?solution=1-1B03X
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Object Programming 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!