MATLAB Answers

G A
0

Is there the more elegant way to do this?

Asked by G A
on 14 Jun 2019
Latest activity Edited by G A
on 14 Jun 2019
By trial and error I came to the following solution for choosing in my GUI a colormap and the number of colors to be used for my 3D surf plot:
%CM_3D is the value from uicontrol popupmenu: 'String',{ 'parula'; 'jet'; 'hsv'; 'hot'}
%NumC=5 is the str2double input from uicontrol edit: 'String','5'
%NumC can be empty matrix [], then the number of colors expected to be the default number
%colormap parula or colormap parula(5) or colormap parula() works; colormap parula(NumC) and colormap parula([]) does nor work
%colormap(parula) or colormap(parula(NumC)) or colormap(parula()) works; colormap(parula([])) does nor work
switch CM_3D
case 1
cm = @parula;
case 2
cm = @jet;
case 3
cm = @hsv;
case 4
cm = @hot;
end
if isempty(NumC)||isnan(NumC)||NumC==0
colormap(cm()), %colormap(cm) does not work
else
colormap(cm(NumC)),
end
Is there more elegant (or 'professional') solution?

  1 Comment

darova
on 14 Jun 2019
works fine for me

Sign in to comment.

Products

1 Answer

Answer by Matt J
on 14 Jun 2019
Edited by Matt J
on 14 Jun 2019
 Accepted Answer

You don't need the switch block. You can just do,
items = get(hObject,'String');
index_selected = get(hObject,'Value');
cm = str2func( items{index_selected} );

  1 Comment

G A
on 14 Jun 2019
Thanks!

Sign in to comment.