Matlab 繪圖配色解決方案 — cbrewer 函數(shù)的介紹與使用

寫在前面

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

上述代碼繪制了y=ax^2拋物線在a分別取1屹培,2,...,10時(shí),其在x\in[-1,1]時(shí)的函數(shù)圖像怔檩。結(jié)果如下圖所示褪秀。

我們可以看到,隨著?a 的不斷增大薛训,曲線的綠色程度不斷加深媒吗。這種配色方案對(duì)于我們想要突出函數(shù)中某個(gè)參數(shù)變化時(shí),因變量如何變化是有清晰直觀的效果的乙埃。當(dāng)然我們可以把圖做的更漂亮一些闸英,比如下圖,誤差函數(shù) y=erf(ax) 隨參數(shù)?a?的變化趨勢(shì)膊爪。這種連續(xù)型的配色方案可以定性的看出某個(gè)函數(shù)對(duì)于其中的參數(shù)變化的敏感程度自阱。

比如說(shuō)論文中常用的敏感性分析,便可以用此種配色方案來(lái)實(shí)現(xiàn)(如下圖所示)米酬。

Ref:?X. Zhu, J. Huang, Modeling Electrocatalytic Oxidation of Formic Acid at Platinum, Journal of The Electrochemical Society, 167 (2019) 013515-013526.

此外沛豌,由cbrewer 生成的配色方案可以直接用于colormap,以繪制一個(gè)馬鞍面 Z=X^2-Y^2為例:

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)歸屬同一作者姿现。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肖抱,隨后出現(xiàn)的幾起案子备典,更是在濱河造成了極大的恐慌,老刑警劉巖意述,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提佣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荤崇,警方通過(guò)查閱死者的電腦和手機(jī)拌屏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)术荤,“玉大人倚喂,你說(shuō)我怎么就攤上這事“昶荩” “怎么了端圈?”我有些...
    開(kāi)封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵焦读,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我舱权,道長(zhǎng)矗晃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任宴倍,我火速辦了婚禮张症,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸵贬。我一直安慰自己吠冤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布恭理。 她就那樣靜靜地躺著拯辙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颜价。 梳的紋絲不亂的頭發(fā)上涯保,一...
    開(kāi)封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音周伦,去河邊找鬼夕春。 笑死,一個(gè)胖子當(dāng)著我的面吹牛专挪,可吹牛的內(nèi)容都是我干的及志。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寨腔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼速侈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起迫卢,我...
    開(kāi)封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倚搬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后乾蛤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體每界,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年家卖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眨层。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡上荡,死狀恐怖趴樱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤伊佃,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布窜司,位于F島的核電站,受9級(jí)特大地震影響航揉,放射性物質(zhì)發(fā)生泄漏塞祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一帅涂、第九天 我趴在偏房一處隱蔽的房頂上張望议薪。 院中可真熱鬧,春花似錦媳友、人聲如沸斯议。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哼御。三九已至,卻和暖如春焊唬,著一層夾襖步出監(jiān)牢的瞬間恋昼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工赶促, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留液肌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓鸥滨,卻偏偏與公主長(zhǎng)得像嗦哆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婿滓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容