Если ничего не помогает, вы можете попробовать процедуру обратного вызова:
function=ChangeCMap()
CMList=get(CMapList,'string'); %% Read colormap names
CMVal =get(CMapList,'value'); %% Get the index of desired colormap
try
colormap(Ax,CMList{CMVal}); %% Try to set the colormap...
catch Msg %% ... if it fails, then:
if strcmp(Msg.stack.name,'colormap') %% Check if error was caused by colormap function
set(Ax,'colormap`,'jet'); %% set "default" colormap (optional)
indices=1:length(CMList);
set(CMapList,'string',CMList{indices~=CMVal}) %% remove the colormap name thet caused error
else
disp(Msg) %% Print the error message in matlab shell
end
end
end
В этом примере ожидаются общие переменные CMapList
- дескриптор всплывающего меню - и Ax
- дескриптор осей.
Когда функция вызывается, она пытается установить цветовую карту. Если это не удается, он устанавливает цветовую карту по умолчанию и удаляет проблемное имя из меню.
Убедитесь, что первая и последняя карты цветов не вызовут ошибки, иначе обновление CMapList
должно будет обрабатывать эти параметры.
Вы также можете воспользоваться тем фактом, что каждая карта цветов имеет свой собственный файл .m
, поэтому вам не нужно ждать, пока произойдет ошибка.
CMap='bone'; %% example
if exist(CMap,'file')
colormap(Ax,CMap) %% bone.m exist somewhere in the matlab paths
else
colormap(Ax,'jet') %% bone.m does not exist in the matlab paths
end
Это поднимает один вопрос — вы можете определить свои собственные цветовые карты и заставить алгоритм генерировать отсутствующие .m
файлы...
person
Crowley
schedule
11.05.2016