2016-05-11 85 views
8

我正在編寫一個GUI,它可以從用戶選擇顏色映射的名稱中受益。不過,我有點尷尬,因爲我似乎無法通過編程獲得受支持的顏色映射名稱列表!MATLAB獲取顏色映射名稱列表

雖然我可以硬編碼名稱;我的代碼可能會運行在老版本的matlab上,它可能有不同的色彩映射。我主要關心的是parula色圖,如果我沒記錯的話,它在MATLAB 2014中不存在。

有什麼想法?

+0

確實。 Parula在MATLAB 2014b中提供,但不在2014a中 –

+0

嘿!人們給你一些很酷的答案,考慮接受其中一個有效 –

回答

7

或者,您可以硬編碼他們,有一個if語句graphicsversion(fhandle)就可以了。

如果默認圖形系統是舊的 句柄圖形,則返回true。


您也可以嘗試得到了廣泛的列表,然後檢查是否colormapname.mmatlabroot\toolbox\matlab\graph3d文件。如果該功能在那裏,那麼色彩映射就會在該版本中出現。儘管如此,您仍然需要對廣泛的列表進行硬編碼。

編輯:爲@thewaywewalk建議,你可以在matlabroot\toolbox\matlab\graph3d和esarch打開Contents.m% Color maps.它具有色彩映射表中包括的版本列表。在2014B上線了29-48

+1

爲了避免硬編碼,你可以打開'matlabroot \ toolbox \ matlab \ graph3d \ contents.m'並通過文件的字符串處理來獲取列表。 – thewaywewalk

+0

@thewaywewalk精彩!我已經添加到答案! –

+0

@thewaywewalk它似乎沒有,我的matlab 2015a在該目錄中有這個contents.m文件。 – warpstack

4

我不是100%肯定它工作在MATLAB由於@BillBokeey在這並不在MATLAB工作的意見指出,但在八度,你可以使用:

CM = colormap('list'); 

它會返回一個包含所有有效顏色映射的字符串數組。

CM = 
{ 
    [1,1] = autumn 
    [1,2] = bone 
    [1,3] = cool 
    [1,4] = copper 
    [1,5] = flag 
    [1,6] = gmap40 
    [1,7] = gray 
    [1,8] = hot 
    [1,9] = hsv 
    [1,10] = jet 
    [1,11] = lines 
    [1,12] = ocean 
    [1,13] = pink 
    [1,14] = prism 
    [1,15] = rainbow 
    [1,16] = spring 
    [1,17] = summer 
    [1,18] = white 
    [1,19] = winter 
} 
+0

似乎不適用於2014b @beaker – BillBokeey

+0

@BillBokeey Drat。感謝您的檢查。 – beaker

+0

我很想DV +評論「不是正確的語言」:D – Adriaan

4

的可能性得到了廣泛的可用色彩映射列表:

matlabroot\help\matlab\ref,你可以找到所有可用的顏色表,其文件名是形式的預覽colormap_colormapname.png

在爲了讓您的列表,你可以使用:

CurrFolder=pwd; 

cd(strcat(matlabroot,'\help\matlab\ref')) 

Colormaps=dir('*colormap_*.png'); 

TmpColormapsList={Colormaps.name}; 

TmpColormapsList=cellfun(@(S)strrep(S,'colormap_',''),TmpColormapsList,'UniformOutput',false); 

ColormapsList=cellfun(@(S)strrep(S,'.png',''),TmpColormapsList,'UniformOutput',false); 

cd(CurrFolder); 

這將輸出包含可用色彩映射表的名稱定義字符串的單元陣列。

漂亮的醜陋的黑客攻擊,但至少它的工作原理上的2014B(請檢查您的版本,如果您有其它的)

+1

適用於R2015a。 – Adriaan

+0

在2014b中缺少'vga' –

2

另一種方式(破解),可能是提取字符串出了colormapeditor功能:

colormapeditorString = fileread(strcat(matlabroot,'\toolbox\matlab\graph3d\colormapeditor.m')); 
posStart = strfind(colormapeditorString,'stdcmap(maptype'); 
posEnd = strfind(colormapeditorString(posStart:end),'end') + posStart; 
stdcmapString = colormapeditorString(posStart:posEnd); 
split = strsplit(stdcmapString, '(mapsize)'); 
list = cellfun(@(x)x(find(x==' ', 1,'last'):end), split,'uni',0); 
list(end) = []; 
+0

在Windows和matlab上缺少'vga' 2014b –

+2

'vga'雖然不是一個真正的常規彩色映射,但它的行爲不同,因爲它沒有其他映射所做的插值,例如,你可以去'parula(32)','vga(32)'是一個錯誤。 – Dan

+0

是的,是的,你是對的。我提出了這個答案,我相信比我更好。對於任何事物,我都不會有什麼用處,只是指出缺失,對於未來的讀者。 –

1

如果一切失敗,您可以嘗試回調例程:

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 - 處理到t他彈出菜單 - 和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文件...

+0

很好的答案,但我相信錯誤檢查shoudl將被添加到它。 –

+1

@AnderBiguri我試着添加錯誤檢查和另一種方法。 – Crowley

0

鑑於返回一個3列的矩陣,甚至是任何功能。 MAT文件包含cmap變量與這樣一個矩陣,可以使用colormap,要求一個「所有」色彩表的列表是沒有意義的。

您可以使用exist(即exist('parula', 'file')),或try條款,來檢查的某些功能的存在,併爲他們提供在你的GUI色彩映射表,雖然這可能是有問題的,如果用戶自定義函數名稱相同不會產生色彩映射。

我有喜歡製作完全自定義顏色映射的用戶,他們將這些顏色保存在MAT文件中,所以對於他們來說,我會將顏色映射設置爲可自定義的文本框,並進行一些驗證以確保它確實是有效的顏色映射。

+0

MATLAB中默認包含的所有顏色映射的列表,而不是所有可能的顏色映射的列表,您錯過了該點 –