Matplotlib可視化之自定義顏色繪制精美統(tǒng)計圖
自定義顏色
在生活中,我們可能對色彩的搭配與審美有自己的偏好,因此,我們可能希望matplotlib遵循自定義的顏色方案,以便所繪制的圖形更好地適合文檔或網(wǎng)頁。
matplotlib中有多種定義顏色的方法,常見的方法包括:
1.三元組(Triplets):顏色可以描述為一個實數(shù)三元組,即顏色的紅、藍、綠分量,其中每個分量在[0,1]區(qū)間內(nèi)。因此,(1.0, 0.0, 0.0)表示純紅色,而(1.0, 0.0, 1.0)則表示粉色。
2.四元組(Quadruplets):它們前三個元素與三元組定義相同,第四個元素定義透明度值。此值也在[0,1]區(qū)間內(nèi)。將圖形渲染到圖片文件中時,使用透明顏色可以使繪制圖形與背景進行混合。
3.預(yù)定義名稱:matplotlib將標準HTML顏色名稱解釋為實際顏色。例如,字符串red即可表示為紅色。同時一些某些顏色的具有簡潔的別名,如下表所示:
別名 | 顏色 | 顯示 |
b | blue | |
g | green | |
r | red | |
c | cyan | |
m | magenta | |
y | yellow | |
k | black | |
w | white |
4.HTML顏色字符串:matplotlib可以將HTML顏色字符串解釋為實際顏色。這些字符串被定義為#RRGGBB,其中RR、GG和BB是使用十六進制編碼的紅色、綠色和藍色分量。
5.灰度字符串:matplotlib將浮點值的字符串表示形式解釋為灰度,例如0.75表示中淺灰色。
使用自定義顏色繪制曲線圖
通過設(shè)置plt.plot()
函數(shù)的參數(shù)color(或等效的簡寫為c),可以設(shè)置曲線的顏色,如下所示:
import numpy as np import matplotlib.pyplot as plt def pdf(x, mu, sigma): a = 1. / (sigma * np.sqrt(2. * np.pi)) b = -1. / (2. * sigma ** 2) return a * np.exp(b * (x - mu) ** 2) x = np.linspace(-6, 6, 1000) for i in range(5): samples = np.random.standard_normal(50) mu, sigma = np.mean(samples), np.std(samples) plt.plot(x, pdf(x, mu, sigma), color = str(.15*(i+1))) plt.plot(x, pdf(x, 0., 1.), color = 'k') plt.plot(x, pdf(x, 0.2, 1.), color = '#00ff00') plt.plot(x, pdf(x, 0.4, 1.), color = (0.9,0.9,0.0)) plt.plot(x, pdf(x, 0.4, 1.), color = (0.9,0.9,0.0,0.8)) plt.show()
使用自定義顏色繪制散點圖
可以以同樣的方式像控制曲線圖一樣控制散點圖的顏色。有兩種可用的形式:
1.為所有點使用相同的顏色 :所有點都將以相同的顏色顯示。
2.為每個點定義不同的顏色:為每個點提供不同的顏色。
為所有點使用相同的顏色
利用從二元高斯分布中提取的兩組點y_1
和y_2
,每一組中點的顏色相同:
import numpy as np import matplotlib.pyplot as plt y_1 = np.random.standard_normal((150, 2)) y_1 += np.array((-1, -1)) # Center the distrib. at <-1, -1> y_2 = np.random.standard_normal((150, 2)) y_2 += np.array((1, 1)) # Center the distrib. at <1, 1> plt.scatter(y_1[:,0], y_1[:,1], color = 'c') plt.scatter(y_2[:,0], y_2[:,1], color = 'b') plt.show()
為每個點定義不同的顏色
我們總會遇到這樣的繪圖場景,需要為不同類別的點使用不同的顏色進行繪制,以觀察不同類別間的差異情況。以為例,其數(shù)據(jù)集中數(shù)據(jù)類似如下所示:
5.0,3.3,1.4,0.2,Iris-setosa 7.0,3.2,4.7,1.4,Iris-versicolo
數(shù)據(jù)集的每個點都存儲在以逗號分隔的列表中。最后一列給出每個點的標簽(標簽包含三類:Iris-virginica、Iris-versicolor 和Iris-Vertosa)。在示例中,這些點的顏色將取決于它們的標簽,如下所示:
import numpy as np import matplotlib.pyplot as plt label_set = ( b'Iris-setosa', b'Iris-versicolor', b'Iris-virginica', ) def read_label(label): return label_set.index(label) data = np.loadtxt('iris.data', delimiter = ',', converters = { 4 : read_label }) color_set = ('c', 'y', 'm') color_list = [color_set[int(label)] for label in data[:,4]] plt.scatter(data[:,0], data[:,1], color = color_list) plt.show()
Tips:
對于三種可能的標簽,分別指定一種唯一的顏色。顏色在color_set中定義,標簽在label_set中定義。label_set中的第i個標簽與color_set中的第i個顏色相關(guān)聯(lián)。然后我們利用它們把標簽列表轉(zhuǎn)換成顏色列表color_list。然后只需調(diào)用plt.scatter()一次即可顯示所有點及其顏色。我們也可以通過對三個不同的類別單獨調(diào)用plt.scatter()來實現(xiàn),但這將需要更多的代碼。另外需要注意的是:如果兩點有可能有相同的坐標,但有不同的標簽,顯示的顏色將是后繪制點的顏色,可以使用透明顏色,用來顯示重疊點。
為散點圖中數(shù)據(jù)點的邊使用自定義顏色
與color參數(shù)控制點的顏色一樣,可以使用edgecolor參數(shù)控制數(shù)據(jù)點的邊的顏色??梢詾槊總€點的邊設(shè)置相同的顏色:
import numpy as np import matplotlib.pyplot as plt data = np.random.standard_normal((100, 2)) plt.scatter(data[:,0], data[:,1], color = '1.0', edgecolor='r') plt.show()
Tips:也可以像在為每個點定義不同的顏色部分中介紹的一樣為每個點的邊設(shè)置不邊的顏色
使用自定義顏色繪制條形圖
控制繪制條形圖使用的顏色與曲線圖和散點圖的工作原理相同,即通過可選參數(shù)color:
import numpy as np import matplotlib.pyplot as plt w_pop = np.array([5., 30., 45., 22.]) m_pop = np.array( [5., 25., 50., 20.]) x = np.arange(4) plt.barh(x, w_pop, color='m') plt.barh(x, -m_pop, color='c') plt.show()
Tips:
使用pyplot.bar()和pyplot.barh()函數(shù)自定義顏色繪制條形圖的工作方式與pyplot.scatter()完全相同,只需設(shè)置可選參數(shù)color,同時也可以參數(shù)edgecolor控制條形邊的顏色。
import numpy as np import matplotlib.pyplot as plt values = np.random.random_integers(99, size = 50) color_set = ('c', 'm', 'y', 'b') color_list = [color_set[(len(color_set) * val) // 100] for val in values] plt.bar(np.arange(len(values)), values, color = color_list) plt.show()
使用自定義顏色繪制餅圖
自定義餅圖顏色的方法類似于條形圖:
import numpy as np import matplotlib.pyplot as plt color_set = ('c', 'm', 'y', 'b') values = np.random.rand(6) plt.pie(values, colors = color_set) plt.show()
Tips:
餅圖接受使用colors參數(shù)(注意,此處是colors,而不是在plt.plot()中使用的color)的顏色列表。但是,如果顏色數(shù)少于輸入值列表中的元素數(shù),那么plt.pie()將循環(huán)使用顏色列表中的顏色。在示例中,使用包含四種顏色的列表,為包含六個值的餅圖著色,因此,其中有兩個顏色將使用兩次。
使用自定義顏色繪制箱型圖
將箱型圖中線條顏色進行修改:
import numpy as np import matplotlib.pyplot as plt values = np.random.randn(100) b = plt.boxplot(values) for name, line_list in b.items(): for line in line_list: line.set_color('m') plt.show()
使用色彩映射繪制散點圖
如果要在圖形中使用多種顏色,逐個定義每種顏色并不是最佳方案,色彩映射可以解決此問題。色彩映射用一個變量對應(yīng)一個值(顏色)的連續(xù)函數(shù)定義顏色。matplotlib提供了幾種常見的顏色映射;大多數(shù)是連續(xù)的顏色漸變。
色彩映射在matplotib.cm模塊中定義,提供創(chuàng)建和使用色彩映射的函數(shù),它還提供了預(yù)定義的色彩映射選擇。
函數(shù)pyplot.scatter()接受color參數(shù)的值列表,當提供cmap參數(shù)時,這些值將被解釋為色彩映射的索引:
import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt n = 256 angle = np.linspace(0, 8 * 2 * np.pi, n) radius = np.linspace(.5, 1., n) x = radius * np.cos(angle) y = radius * np.sin(angle) plt.scatter(x, y, c = angle, cmap = cm.hsv) plt.show()
Tips:在matplotlib.cm模塊中提供了大量預(yù)定義的色彩映射,其中cm.hsv包含全光譜的顏色。
使用色彩映射繪制條形圖
plt.scatter()
函數(shù)內(nèi)置了對色彩映射的支持,其他一些繪圖函數(shù)也內(nèi)置支持色彩映射。但是,有些函數(shù)(如pyplot.bar())并未內(nèi)置對色彩映射的支持。但是matplotlib可以從顏色映射顯式生成顏色:
import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt import matplotlib.colors as col values = np.random.random_integers(99, size = 50) cmap = cm.ScalarMappable(col.Normalize(0, 99), cm.binary) plt.bar(np.arange(len(values)), values, color = cmap.to_rgba(values)) plt.show()
Tips:首先創(chuàng)建色彩映射cmap,以便將[0, 99]范圍內(nèi)的值映射到matplotlib.cm.binary的顏色。然后,函數(shù)cmap.to_rgba將值列表轉(zhuǎn)換為顏色列表。因此,盡管plt.bar并未內(nèi)置色彩映射支持,但依舊可以使用并不復(fù)雜的代碼實現(xiàn)色彩映射。
創(chuàng)建自定義配色方案
matplotlib使用的默認顏色考慮的主要對象是打印文檔或出版物。因此,默認情況下,背景為白色,而標簽、軸和其他注釋則顯示為黑色,在某些不同的使用環(huán)境中,我們可能需要使用的配色方案;例如,將圖形背景設(shè)置為黑色,注釋設(shè)置為白色。
在matplotlib中,各種對象(如軸、圖形和標簽)都可以單獨修改。但逐個更改這些對象的顏色配置并非最佳方案。在matplotlib中,所有對象都可以利用集中式配置修改其默認顏色:
import numpy as np import matplotlib as mpl from matplotlib import pyplot as plt mpl.rc('lines', linewidth = 2.) mpl.rc('axes', facecolor = 'k', edgecolor = 'w') mpl.rc('xtick', color = 'w') mpl.rc('ytick', color = 'w') mpl.rc('text', color = 'w') mpl.rc('figure', facecolor = 'k', edgecolor ='w') mpl.rc('axes', prop_cycle = mpl.cycler(color=[(0.1, .5, .75),(0.5, .5, .75)])) x = np.linspace(0, 7, 1024) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) plt.show()
到此這篇關(guān)于Matplotlib可視化之自定義顏色繪制精美統(tǒng)計圖的文章就介紹到這了,更多相關(guān)Matplotlib繪制統(tǒng)計圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 教你學會通過python的matplotlib庫繪圖
- matplotlib.subplot()畫子圖并共享y坐標軸的方法
- PyQt5實現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動條效果
- Python matplotlib實用繪圖技巧匯總
- 解決使用Spyder IDE時matplotlib繪圖的顯示問題
- 用Python的繪圖庫(matplotlib)繪制小波能量譜
- 完美解決matplotlib子圖坐標軸重疊問題
- Python基礎(chǔ)之畫圖神器matplotlib
- python讀取并顯示圖片的三種方法(opencv、matplotlib、PIL庫)
- python 繪圖模塊matplotlib的使用簡介
相關(guān)文章
Mapper批量插入Oracle數(shù)據(jù)@InsertProvider注解
今天小編就為大家分享一篇關(guān)于Mapper批量插入Oracle數(shù)據(jù)@InsertProvider注解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03Java?CompletableFuture實現(xiàn)多線程異步編排
這篇文章主要為大家介紹了Java?CompletableFuture實現(xiàn)多線程異步編排,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Elasticsearch term 查詢之精確值搜索功能實現(xiàn)
term查詢是Elasticsearch中用于精確值搜索的一種基本方式,通過了解 term 查詢的工作原理和使用方法,你可以更好地利用 Elasticsearch 進行結(jié)構(gòu)化數(shù)據(jù)的搜索和分析,本文將詳細介紹 term 查詢的工作原理、使用場景以及如何在 Elasticsearch 中應(yīng)用它,感興趣的朋友一起看看吧2024-06-06SpringCloud集成Sleuth和Zipkin的思路講解
Zipkin 是 Twitter 的一個開源項目,它基于 Google Dapper 實現(xiàn),它致力于收集服務(wù)的定時數(shù)據(jù),以及解決微服務(wù)架構(gòu)中的延遲問題,包括數(shù)據(jù)的收集、存儲、查找和展現(xiàn),這篇文章主要介紹了SpringCloud集成Sleuth和Zipkin,需要的朋友可以參考下2022-11-11java使用list實現(xiàn)數(shù)據(jù)庫的like功能
這篇文章主要介紹了java使用list實現(xiàn)數(shù)據(jù)庫的like功能,需要的朋友可以參考下2014-04-04Java Web使用簡單的批處理操作(記事本+Tomcat)
這篇文章主要介紹了Java Web使用簡單的批處理操作 ,需要的朋友可以參考下2014-10-10SpringBoot?@RestControllerAdvice注解對返回值統(tǒng)一封裝的處理方法
這篇文章主要介紹了SpringBoot?@RestControllerAdvice注解對返回值統(tǒng)一封裝,使用@RestControllerAdvice對響應(yīng)進行增強,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09