Why after plotting on axes the ButtonDownFcn doesn't work?
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Bing
le 16 Avr 2017
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
le 4 Août 2017
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)
Réponse acceptée
Matt Fig
le 29 Nov 2012
Modifié(e) : Matt Fig
le 29 Nov 2012
>> 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 commentaires
Jan
le 29 Nov 2012
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().
Plus de réponses (3)
Deep Desai
le 25 Juin 2014
Modifié(e) : Deep Desai
le 25 Juin 2014
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 commentaires
Jan
le 29 Nov 2012
Modifié(e) : Jan
le 29 Nov 2012
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 commentaires
Image Analyst
le 29 Nov 2012
For the Mathworks view on this: http://www.mathworks.com/support/solutions/en/data/1-1B03X/?solution=1-1B03X
Voir également
Catégories
En savoir plus sur Graphics Object Programming dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!