寫在前面
Matlab 在繪圖功能上十分的強(qiáng)大,但是它在繪圖呈現(xiàn)的配色方案是固定的晴裹。當(dāng)然我們可以指定曲線或者曲面的顏色來(lái)更改顏色方案,但如果對(duì)于圖中曲線較多的情況下,這就顯得過(guò)于麻煩败徊。
另外,我們可能需要嘗試不同的配色方案掏缎,從而作出比較美觀合適的圖皱蹦。
為了解決以上問(wèn)題,今天我就來(lái)介紹一個(gè)由Charles 編寫的Matlab 函數(shù) cbrewer. 把它添加到Matlab 庫(kù)函數(shù)中眷蜈,可以實(shí)現(xiàn):
1. 在Matlab 中使用命令來(lái)查看不同的配色方案沪哺;
2. 生成某一種配色方案的RGB 表格,并應(yīng)用于繪圖酌儒;
3. 允許通過(guò)插值(interp1插值方法) RGB 索引來(lái)為每個(gè)色表使用可變數(shù)量的顏色辜妓。
接下來(lái)我們將依次呈現(xiàn):
1. Matlab顏色表示方法與 cbrewer 簡(jiǎn)介;
2. cbrewer 的下載并將其添加到matlab 庫(kù)函數(shù)中忌怎;
3. cbrewer 的基本使用方法籍滴。
一. Matlab顏色表示方法與 cbrewer 簡(jiǎn)介
在matlab 中,對(duì)于一些常見(jiàn)的顏色(紅橙黃...)呆躲,我們可以直接指定顏色的名稱('red', 'orange')去修改曲線的顏色异逐。而對(duì)于一些沒(méi)有名稱的顏色,我們就必須要用RGB 模式去指定插掂。
RGB模式下的三種基本色灰瞻,紅色(R),綠色(G)辅甥,藍(lán)色(B) 按照不同的比例混合即可得到我們自然界中肉眼可見(jiàn)的所有顏色酝润。在matlab 中,每一種基色的比例由一個(gè)0-1 之間的數(shù)字來(lái)指定璃弄,那么我們就可以指定一個(gè)三維行向量去表示某一種特定的顏色要销。如[0 0 1]代表藍(lán)色,[1 1 1]代表白色夏块。
那么對(duì)于一種配色方案(不同顏色按順序排列)疏咐,當(dāng)然就可以用一組三維行向量去表示纤掸。比如對(duì)于下圖的配色(8種顏色):
就可以用一個(gè)八行三列的矩陣表示:
而cbrewer 正是這樣一種函數(shù):它可以提供多種可以使用命令提前預(yù)覽的配色方案,并將某一種配色方案在matlab 得到一組三維行向量浑塞,供我們直接使用借跪。
cbrewer 還采用interp1 方法對(duì) RGB值進(jìn)行插值處理,從而能夠得到任意數(shù)量的顏色的配色方案(RGB不同行數(shù)的三維矩陣)酌壕。
此外掏愁,cbrewer 產(chǎn)生的三維向量還可以直接應(yīng)用生成colormap。
關(guān)于cbrewer 的一些具體介紹以及配色效果卵牍,大家可以訪問(wèn):
ColorBrewer: Color Advice for Maps
cbrewer : colorbrewer schemes for Matlab - File Exchange - MATLAB Central
二. cbrewer 的下載并將其添加到庫(kù)函數(shù)
由于cbrewer不是matlab自身默認(rèn)攜帶的庫(kù)函數(shù)果港,因此我們需要自行下載并將其加入到庫(kù)函數(shù)中去。
cbrewer : colorbrewer schemes for Matlab - File Exchange - MATLAB Central
首先我們打開(kāi)上面的下載鏈接糊昙,點(diǎn)擊下圖箭頭所指的的 Download 進(jìn)行下載得到壓縮文件辛掠。
然后將其解壓后的文件夾放入一個(gè)指定的路徑中(要記住,圖省事我就直接放在C盤目錄下了)溅蛉。打開(kāi)matlab公浪,點(diǎn)擊“Set Path”(中文為路徑設(shè)置他宛,或者是設(shè)置路徑吧)船侧。
在打開(kāi)的窗口中點(diǎn)擊“Add with Subfolders...”,然后進(jìn)入cbrewer文件夾的存放路徑厅各,選擇cbrewer文件夾镜撩。
返回到上圖窗口后,點(diǎn)擊“save”(中文“保存")队塘,確認(rèn)后袁梗,退出窗口。
為了確認(rèn)cbrewer 是否被正確地添加到路徑憔古,我們可以在matlab命令窗口中輸入:
help cbrewer
如果返回關(guān)于 cbrewer 的幫助信息遮怜,那么表示此函數(shù)已經(jīng)被成功地添加到庫(kù)函數(shù)中。
三. cbrewer 的基本使用方法
成功將其添加到matlab 之后我們就可以具體地使用這個(gè)函數(shù)了鸿市。其實(shí)具體的使用方法在上面使用 help cbrewer 命令得到的幫助信息里都有锯梁,但這里還是用中文來(lái)介紹一下。
首先我們查看一下焰情,這個(gè)函數(shù)里所包含的配色方案陌凳,在matlab 命令窗口中輸入:
cbrewer()
回車可以得到如下圖所示的一個(gè)配色方案圖,圖上面的三個(gè)單詞分別表示配色圖的三個(gè)類型
1. Diverging 發(fā)散類型内舟,可以看到該類型配色合敦,中間顏色最淡,向兩邊延伸出兩個(gè)色系验游;
2. Sequential 連續(xù)類型充岛,一般為同一個(gè)色系保檐,越往右,顏色越深崔梗;
3. Qualitative 定性類型展东,此類型的方案中各個(gè)顏色差別很大。
上面三個(gè)類型炒俱,在函數(shù)使用中盐肃,一般縮寫為 div, seq, qua.
同時(shí),在下圖中权悟,每一個(gè)類型的配色方案左側(cè)為每一個(gè)具體配色方案的名稱砸王。在具體使用cbrewer函數(shù)的過(guò)程中,我們也是通過(guò)先指定配色方案類型以及具體配色方案名稱去得到某一個(gè)配色方案的RGB 值的矩陣峦阁。
獲取某種配色方案的RGB值的矩陣可由以下命令獲得:
RGB = cbrewer('配色方案類型', '具體配色方案', 顏色個(gè)數(shù), '插值方法')
其中‘插值方法’是采用matlab 內(nèi)置函數(shù)interp1的方法谦铃,一般用'linear' 就行。
顏色個(gè)數(shù) 在‘linear’插入方式下榔昔,可以隨意更改驹闰,根據(jù)自己所需要繪制曲線的個(gè)數(shù)或者配色的密集程度要求來(lái)確定。
比如在matlab 命令窗口中輸入以下命令:
RGB = cbrewer('seq', 'Greens', 10, 'linear')
我們發(fā)現(xiàn)返回了一個(gè)3列10行撒会,名為RGB的矩陣嘹朗。
那么矩陣RGB中每一行就代表了一個(gè)具體的顏色,我們可以運(yùn)行以下代碼簡(jiǎn)單的看下矩陣中每一行所代表的顏色诵肛。
RGB = cbrewer('seq', 'Greens', 10, 'linear');% 生成一個(gè)配色方案的RGB矩陣
x = linspace(-1,1,100);% 自變量x
for a = 1:10
? ? plot(x, a.*x.^2, 'Color', RGB(a,:), 'LineWidth', 2);
????hold on;
end
上述代碼繪制了拋物線在
分別取
時(shí),其在
時(shí)的函數(shù)圖像怔檩。結(jié)果如下圖所示褪秀。
我們可以看到,隨著? 的不斷增大薛训,曲線的綠色程度不斷加深媒吗。這種配色方案對(duì)于我們想要突出函數(shù)中某個(gè)參數(shù)變化時(shí),因變量如何變化是有清晰直觀的效果的乙埃。當(dāng)然我們可以把圖做的更漂亮一些闸英,比如下圖,誤差函數(shù)
隨參數(shù)?
?的變化趨勢(shì)膊爪。這種連續(xù)型的配色方案可以定性的看出某個(gè)函數(shù)對(duì)于其中的參數(shù)變化的敏感程度自阱。
比如說(shuō)論文中常用的敏感性分析,便可以用此種配色方案來(lái)實(shí)現(xiàn)(如下圖所示)米酬。
此外沛豌,由cbrewer 生成的配色方案可以直接用于colormap,以繪制一個(gè)馬鞍面 為例:
x1 = linspace(-1,1,20);
y1 = linspace(-1,1,20);
[X, Y] = meshgrid(x1, y1);
Z = X.^2 - Y.^2;
surf(X, Y, Z);
colorbar('FontSize',12);
按上述原始代碼,通過(guò)matlab默認(rèn)的配色方案加派,繪制的結(jié)果如下圖所示:
如果我們?cè)谏鲜龃a后叫确,加入cbrewer生成的配色方案的代碼:
RGB=cbrewer('seq', 'PuBu', 100, 'linear'); % 生成PuBu的配色方案的RGB矩陣
colormap(RGB); % 將RGB配色用于colormap
那么我們就可以更改三維繪圖的配色,如下圖所示芍锦。
當(dāng)然具體配色方案的選擇還是需要根據(jù)自身對(duì)繪圖的要求來(lái)確定竹勉,可以嘗試不同的配色方案,或者選擇自己喜愛(ài)的色系娄琉。
最后總結(jié)一下:
#? 在matlab繪圖中次乓,使用某種顏色可以采用RGB模式,其是一個(gè)三維的行向量孽水,每個(gè)分量代表著三個(gè)基本色的深淺程度票腰;
# 配色方案matlab中RGB模式下實(shí)際上就是一個(gè)多行的RGB值的矩陣;
# cbrewer函數(shù)本身自帶一些配色方案女气,在matlab命令窗口下可以通過(guò) cbrewer() 命令來(lái)查看杏慰;
# 通過(guò) RGB = cbrewer('配色方案類型', '具體配色方案', 顏色個(gè)數(shù), '插值方法') 命令,可以將某種配色方案轉(zhuǎn)化為RGB值的矩陣炼鞠,以供使用缘滥;
# 可以修改命令中 顏色個(gè)數(shù) 來(lái)控制生成的配色個(gè)數(shù);
# cbrewer 生成的RGB值的矩陣可直接用于colormap谒主。
當(dāng)然朝扼,合適的配色的選擇還是需要大家多多嘗試。 如果大家在實(shí)際使用中有什么問(wèn)題瘩将,也歡迎在評(píng)論區(qū)討論吟税。
注:本文原出自知乎賬號(hào)@menkez凹耙,與此簡(jiǎn)書賬號(hào)歸屬同一作者姿现。