Azzera filtri
Azzera filtri

Want to draw two axes using a single popupmenu

2 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Walter Roberson
Walter Roberson il 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 Commenti
ahasan ratul
ahasan ratul il 7 Apr 2018
Modificato: Walter Roberson il 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 il 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);

Accedi per commentare.

Più risposte (1)

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

Categorie

Scopri di più su Migrate GUIDE Apps in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by