How to get the handles of a subplot?

19 ビュー (過去 30 日間)
Meshooo
Meshooo 2016 年 11 月 11 日
コメント済み: Meshooo 2016 年 11 月 16 日
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 件のコメント
Adam
Adam 2016 年 11 月 11 日
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.

サインインしてコメントする。

採用された回答

Jan
Jan 2016 年 11 月 11 日
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 件のコメント
Adam
Adam 2016 年 11 月 14 日
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.
Meshooo
Meshooo 2016 年 11 月 16 日
Indeed thank you very much Adam and Jan.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGraphics Object Programming についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by