Matplotlib使用自定義顏色繪制統(tǒng)計(jì)圖

前言

matplotlib提供的所有繪圖都帶有默認(rèn)樣式钞澳。雖然這可以進(jìn)行快速繪圖敛摘,但有時(shí)可能需要自定義繪圖的顏色和樣式吓著,以對(duì)繪制更加精美、符合審美要求的圖像歉井。matplotlib的設(shè)計(jì)考慮到了此需求,可以很容易調(diào)整matplotlib圖形的顏色和樣式哈误。

自定義顏色

在生活中哩至,我們可能對(duì)色彩的搭配與審美有自己的偏好,因此蜜自,我們可能希望matplotlib遵循自定義的顏色方案菩貌,以便所繪制的圖形更好地適合文檔或網(wǎng)頁。matplotlib中有多種定義顏色的方法重荠,常見的方法包括:

1.三元組(Triplets):顏色可以描述為一個(gè)實(shí)數(shù)三元組箭阶,即顏色的紅、藍(lán)戈鲁、綠分量仇参,其中每個(gè)分量在[0,1]區(qū)間內(nèi)。因此婆殿,(1.0, 0.0, 0.0)表示純紅色诈乒,而(1.0, 0.0, 1.0)則表示粉色。

2.四元組(Quadruplets):它們前三個(gè)元素與三元組定義相同婆芦,第四個(gè)元素定義透明度值怕磨。此值也在[0,1]區(qū)間內(nèi)。將圖形渲染到圖片文件中時(shí)消约,使用透明顏色可以使繪制圖形與背景進(jìn)行混合肠鲫。

3.預(yù)定義名稱:matplotlib將標(biāo)準(zhǔn)HTML顏色名稱解釋為實(shí)際顏色。例如或粮,字符串red即可表示為紅色导饲。同時(shí)一些某些顏色的具有簡潔的別名,如下表所示:

4.HTML顏色字符串:matplotlib可以將HTML顏色字符串解釋為實(shí)際顏色。這些字符串被定義為#RRGGBB帜消,其中RR棠枉、GG和BB是使用十六進(jìn)制編碼的紅色、綠色和藍(lán)色分量泡挺。

5.灰度字符串:matplotlib將浮點(diǎn)值的字符串表示形式解釋為灰度辈讶,例如0.75表示中淺灰色。

使用自定義顏色繪制曲線圖

通過設(shè)置plt.plot()函數(shù)的參數(shù)color(或等效的簡寫為c)娄猫,可以設(shè)置曲線的顏色贱除,如下所示:

使用自定義顏色繪制散點(diǎn)圖

可以以同樣的方式像控制曲線圖一樣控制散點(diǎn)圖的顏色。有兩種可用的形式:

1.為所有點(diǎn)使用相同的顏色 :所有點(diǎn)都將以相同的顏色顯示媳溺。

2.為每個(gè)點(diǎn)定義不同的顏色:為每個(gè)點(diǎn)提供不同的顏色月幌。

為所有點(diǎn)使用相同的顏色

利用從二元高斯分布中提取的兩組點(diǎn)y_1和y_2,每一組中點(diǎn)的顏色相同:

為每個(gè)點(diǎn)定義不同的顏色

我們總會(huì)遇到這樣的繪圖場景悬蔽,需要為不同類別的點(diǎn)使用不同的顏色進(jìn)行繪制扯躺,以觀察不同類別間的差異情況。以Fisher's iris數(shù)據(jù)集為例蝎困,其數(shù)據(jù)集中數(shù)據(jù)類似如下所示:

數(shù)據(jù)集的每個(gè)點(diǎn)都存儲(chǔ)在以逗號(hào)分隔的列表中录语。最后一列給出每個(gè)點(diǎn)的標(biāo)簽(標(biāo)簽包含三類:Iris-virginica、Iris-versicolor 和Iris-Vertosa)禾乘。在示例中澎埠,這些點(diǎn)的顏色將取決于它們的標(biāo)簽,如下所示:

Tips:對(duì)于三種可能的標(biāo)簽始藕,分別指定一種唯一的顏色蒲稳。顏色在color_set中定義,標(biāo)簽在label_set中定義伍派。label_set中的第i個(gè)標(biāo)簽與color_set中的第i個(gè)顏色相關(guān)聯(lián)江耀。然后我們利用它們把標(biāo)簽列表轉(zhuǎn)換成顏色列表color_list。然后只需調(diào)用plt.scatter()一次即可顯示所有點(diǎn)及其顏色诉植。我們也可以通過對(duì)三個(gè)不同的類別單獨(dú)調(diào)用plt.scatter()來實(shí)現(xiàn)决记,但這將需要更多的代碼。另外需要注意的是:如果兩點(diǎn)有可能有相同的坐標(biāo)倍踪,但有不同的標(biāo)簽系宫,顯示的顏色將是后繪制點(diǎn)的顏色,可以使用透明顏色建车,用來顯示重疊點(diǎn)扩借。

為散點(diǎn)圖中數(shù)據(jù)點(diǎn)的邊使用自定義顏色

與color參數(shù)控制點(diǎn)的顏色一樣,可以使用edgecolor參數(shù)控制數(shù)據(jù)點(diǎn)的邊的顏色缤至〕弊铮可以為每個(gè)點(diǎn)的邊設(shè)置相同的顏色:

Tips:也可以像在為每個(gè)點(diǎn)定義不同的顏色部分中介紹的一樣為每個(gè)點(diǎn)的邊設(shè)置不邊的顏色

使用自定義顏色繪制條形圖

控制繪制條形圖使用的顏色與曲線圖和散點(diǎn)圖的工作原理相同康谆,即通過可選參數(shù)color:

Tips:使用pyplot.bar()和pyplot.barh()函數(shù)自定義顏色繪制條形圖的工作方式與pyplot.scatter()完全相同,只需設(shè)置可選參數(shù)color嫉到,同時(shí)也可以參數(shù)edgecolor控制條形邊的顏色沃暗。

使用自定義顏色繪制餅圖

自定義餅圖顏色的方法類似于條形圖:

Tips:餅圖接受使用colors參數(shù)(注意,此處是colors何恶,而不是在plt.plot()中使用的color)的顏色列表孽锥。但是,如果顏色數(shù)少于輸入值列表中的元素?cái)?shù)细层,那么plt.pie()將循環(huán)使用顏色列表中的顏色惜辑。在示例中,使用包含四種顏色的列表疫赎,為包含六個(gè)值的餅圖著色盛撑,因此,其中有兩個(gè)顏色將使用兩次捧搞。

使用自定義顏色繪制箱型圖

將箱型圖中線條顏色進(jìn)行修改:


使用色彩映射繪制散點(diǎn)圖

如果要在圖形中使用多種顏色抵卫,逐個(gè)定義每種顏色并不是最佳方案,色彩映射可以解決此問題胎撇。色彩映射用一個(gè)變量對(duì)應(yīng)一個(gè)值(顏色)的連續(xù)函數(shù)定義顏色介粘。matplotlib提供了幾種常見的顏色映射;大多數(shù)是連續(xù)的顏色漸變创坞。色彩映射在matplotib.cm模塊中定義,提供創(chuàng)建和使用色彩映射的函數(shù)受葛,它還提供了預(yù)定義的色彩映射選擇题涨。函數(shù)pyplot.scatter()接受color參數(shù)的值列表,當(dāng)提供cmap參數(shù)時(shí)总滩,這些值將被解釋為色彩映射的索引:

Tips:在matplotlib.cm模塊中提供了大量預(yù)定義的色彩映射纲堵,其中cm.hsv包含全光譜的顏色。

使用色彩映射繪制條形圖

plt.scatter()函數(shù)內(nèi)置了對(duì)色彩映射的支持闰渔,其他一些繪圖函數(shù)也內(nèi)置支持色彩映射席函。但是,有些函數(shù)(如pyplot.bar())并未內(nèi)置對(duì)色彩映射的支持冈涧。但是matplotlib可以從顏色映射顯式生成顏色:

Tips:首先創(chuàng)建色彩映射cmap茂附,以便將[0, 99]范圍內(nèi)的值映射到matplotlib.cm.binary的顏色。然后督弓,函數(shù)cmap.to_rgba將值列表轉(zhuǎn)換為顏色列表营曼。因此,盡管plt.bar并未內(nèi)置色彩映射支持愚隧,但依舊可以使用并不復(fù)雜的代碼實(shí)現(xiàn)色彩映射蒂阱。

創(chuàng)建自定義配色方案

matplotlib使用的默認(rèn)顏色考慮的主要對(duì)象是打印文檔或出版物。因此,默認(rèn)情況下录煤,背景為白色鳄厌,而標(biāo)簽、軸和其他注釋則顯示為黑色妈踊,在某些不同的使用環(huán)境中了嚎,我們可能需要使用的配色方案;例如响委,將圖形背景設(shè)置為黑色新思,注釋設(shè)置為白色。在matplotlib中赘风,各種對(duì)象(如軸夹囚、圖形和標(biāo)簽)都可以單獨(dú)修改。但逐個(gè)更改這些對(duì)象的顏色配置并非最佳方案邀窃。在matplotlib中荸哟,所有對(duì)象都可以利用集中式配置修改其默認(rèn)顏色:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞬捕,隨后出現(xiàn)的幾起案子鞍历,更是在濱河造成了極大的恐慌,老刑警劉巖肪虎,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣砍,死亡現(xiàn)場離奇詭異,居然都是意外死亡扇救,警方通過查閱死者的電腦和手機(jī)刑枝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迅腔,“玉大人装畅,你說我怎么就攤上這事〔琢遥” “怎么了掠兄?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锌雀。 經(jīng)常有香客問我蚂夕,道長,這世上最難降的妖魔是什么腋逆? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任双抽,我火速辦了婚禮,結(jié)果婚禮上闲礼,老公的妹妹穿的比我還像新娘牍汹。我一直安慰自己铐维,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布慎菲。 她就那樣靜靜地躺著嫁蛇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪露该。 梳的紋絲不亂的頭發(fā)上睬棚,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死慕的,一個(gè)胖子當(dāng)著我的面吹牛攀例,可吹牛的內(nèi)容都是我干的勘畔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了暑中?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤鲫剿,失蹤者是張志新(化名)和其女友劉穎鳄逾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灵莲,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雕凹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了政冻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚抵。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赠幕,靈堂內(nèi)的尸體忽然破棺而出俄精,到底是詐尸還是另有隱情询筏,我是刑警寧澤榕堰,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站嫌套,受9級(jí)特大地震影響逆屡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踱讨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一魏蔗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痹筛,春花似錦莺治、人聲如沸廓鞠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽床佳。三九已至,卻和暖如春榄审,著一層夾襖步出監(jiān)牢的瞬間砌们,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工搁进, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪感,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓饼问,卻偏偏與公主長得像影兽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匆瓜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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