前言
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)顏色: