Want to draw two axes using a single popupmenu

2 views (last 30 days)
I haven't used matlab gui before. I want to draw two plots using a popup menu. Suppose, I want to plot cm and mm values in two axes Using a popup menu which has multiple object names. So each time I select one option from popup menu it shows both cm and mm values in two different axes. Any help with an example is highly appreciated.

Accepted Answer

Walter Roberson
Walter Roberson on 7 Apr 2018
function popup1_Callback(hObject, event, handles)
all_strings = get(hObject, 'String');
if ischar(all_strings); all_strings = cellstr(all_strings); end
which_chosen = get(hObject, 'value');
chosen_string = all_strings{which_chosen};
ax1 = handles.axes1;
ax2 = handles.axes2;
switch chosen_string
case 'lollipop':
plot(ax1, 1:20, rand(1,20));
plot(ax2, 1:20, rand(1,20)*10);
case 'ping-pong':
plot(ax1, 1:20, randn(1:20));
plot(ax2, 1:2), randn(1:20)*10);
end
  2 Comments
ahasan ratul
ahasan ratul on 7 Apr 2018
Edited: Walter Roberson on 7 Apr 2018
I have tried your code but it shows plots for only 1st popup menu. when i select 2nd one, It shows an error and the previous two graphs are not updated to new graphs.
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)untitled('popupmenu1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback
and
following is the code that i used:
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
all_strings = get(hObject, 'String');
if ischar(all_strings); all_strings = cellstr(all_strings); end
which_chosen = get(hObject, 'value');
chosen_string = all_strings{which_chosen};
ax1 = handles.axes1;
ax2 = handles.axes2;
switch chosen_string
case 'head'
plot(ax1, 1:20, rand(1,20));
plot(ax2, 1:20, rand(1,20)*10);
case 'head_end'
plot(ax1, 1:50, randn(1:50));
plot(ax2, 1:50, randn(1:50)*10);
end
Walter Roberson
Walter Roberson on 7 Apr 2018
plot(ax1, 1:50, randn(1:50));
plot(ax2, 1:50, randn(1:50)*10);
should be
plot(ax1, 1:50, randn(1,50));
plot(ax2, 1:50, randn(1,50)*10);

Sign in to comment.

More Answers (1)

Munish Verma
Munish Verma on 12 Dec 2021
plot(ax1, 1:50, randn(1,50));
plot(ax2, 1:50, randn(1,50)*10);

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!