How to get the handles of a subplot?
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Meshooo
el 11 de Nov. de 2016
Comentada: Meshooo
el 16 de Nov. de 2016
Dear all,
I want to have a good control to images shown in a subplot figure using a right click of the mouse.
My code as follows:
function my_test()
handles.f = figure;
handles.a = subplot(2,1,1)
imshow('cameraman.tif');
handles.b = subplot(2,1,2)
imshow('moon.tif');
%
set(handles.f,'ButtonDownFcn',{@imageX_ButtonDownFcn});
guidata(handles.a,handles);
function imageX_ButtonDownFcn(hObject, eventdata, handles)
handles=guidata(hObject);
switch lower(get(handles.f, 'selectiontype'))
case 'alt' % right click
I = gcf %get the image from this subplot where you made the right click
BW = im2bw(I) %do something
imshow(BW); %show BW in the same subplot
end
I want of I made a right click to the upper subplot then the image in this subplot will be binarized. Same thing for the lower subplot.
I think the above code is not working because I am not having access to the subplot handles. So I have two subplot.
Any idea how to make it works?
Thank you very much.
Meshoo
1 comentario
Adam
el 11 de Nov. de 2016
handles will not get passed to a user created callback so you would want to remove that 3rd input argument from your
function imageX_ButtonDownFcn(hObject, eventdata, handles)
Obviously you can explicitly pass it in, but you should never do this. What you are doing instead, in getting handles from the hObject is the correct way to get the handles, if you also do what Jan Simon suggests below.
Respuesta aceptada
Jan
el 11 de Nov. de 2016
Do not use the ButtonDownFcn of the figure, but of the subplots:
% Instead of: set(handles.f,'ButtonDownFcn',{@imageX_ButtonDownFcn});
set(handles.a, 'ButtonDownFcn', @imageX_ButtonDownFcn);
set(handles.b, 'ButtonDownFcn', @imageX_ButtonDownFcn);
Then hObject is the subplot's handle in the callback.
6 comentarios
Adam
el 14 de Nov. de 2016
True, so the choice is yours really, depending whether it is more useful to have the axes handle or the image handle directly in your callback.
In a general case it is easier to retrieve the axes handle from the image (it will always be its 'parent') whereas you may plot many objects on the axes so retrieving the image from the 'Children' array can be messy, but if you just have an axes and 1 image then either works fine.
Más respuestas (0)
Ver también
Categorías
Más información sobre Graphics Object Programming en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!