matlab中,每個figure都有(而且僅有)一個colormap,翻譯過來就是色圖。 COLORMAP(MAP) 用MAP矩陣映射當(dāng)前圖形的色圖。 COLORMAP('default') 默認(rèn)的設(shè)置是 JET. MAP = COLORMAP 獲得當(dāng)前色圖矩陣. COLORMAP(AX,...) 應(yīng)用色圖到AX坐標(biāo)對應(yīng)的圖形,而非當(dāng)前圖形。
MAP實際上是一個mx3的矩陣,每一行的3個值都為0-1之間數(shù),分別代表顏色組成的rgb值, [1 0 0] 代表紅色,[0 1 0]代表綠色,[0 0 1]代表藍(lán)色。系統(tǒng)自帶了一些colormap,如:winter、autumn等。輸入winter,就可以看到它是一個64x3的矩陣。用戶可以自定義自己的colormap,而且不一定是64維的。 [0 0 0] is black, [1 1 1] is white, [1 0 0] is pure red, [.5 .5 .5] is gray, and [127/255 1 212/255] is aquamarine. 那么顏色在fill或patch,SURFACE等函數(shù)中到底是如何顯示的呢?本質(zhì)上,是把具體的顏色變成colormap中的相應(yīng)index,也就是行數(shù)。這個過程叫做換算映射:將指定的數(shù)值顏色向量(矩陣)C,映射到對應(yīng)的顏色。顏色矩陣C的數(shù)值范圍為[Cmin, Cmax], Cmin 和Cmax的數(shù)值或者為 min(min(C)) max(max(C)),也可以在CAXIS中設(shè)置。 在matlab中,圖形窗的屬性'CdataMapping‘缺省設(shè)置值為'scaled',也就是線性的映射。 Cmin對應(yīng)的值映射到colormap的第一行,Cmax對應(yīng)的值映射到colormap的最后一行。 映射過程如下: 首先,需要根據(jù)caxis取得Cmin和Cmax兩個變量(默認(rèn)值為0和1),畫圖時如果指定了數(shù)值顏色向量(矩陣)C,Cmin和Cmax自動設(shè)置為C中的最大值和最小值。當(dāng)你想控制時,可以自定義。比如將Cmax減小,這樣將把所有大于Cmax的C值,全部都映射到同一個顏色(colormap 中index最大的行代表的顏色)。 根據(jù)Cij在Cmin和Cmax之間的比例關(guān)系,確定對應(yīng)的顏色的index,默認(rèn)為線性映射。 也就是說,當(dāng)制定了數(shù)值顏色向量(矩陣)C之后畫圖,圖中顏色的使用范圍會自動占滿整個顏色范圍! 實例: clc; clear all; x=[0 1 1 0]; y=[0 0 1 1]; %定義四個點(diǎn) [0 0] [1 0] [1 1] [0 1] H_F=fill(x,y,[0 0.1 0.2 0.6]); %定義四個點(diǎn)的C值
row_cmap = 15; %定義色圖矩陣的行數(shù) color_map1=zeros(row_cmap,3); %定義色圖矩陣 color_r = 0:1/(row_cmap-1):1; color_g = 0:1/(row_cmap-1):1; color_b = 0:1/(row_cmap-1):1; color_map1(:,1) = color_r; color_map1(:,2) = color_g; colormap(color_map1); colorbar;
%本例中顏色從[0 0 0] 變化到[1 1 0] %增加row_cmap的值,如變化到100,則可看到顏色的漸變,而非跳躍型變化。
|