別再問我Python可視化如何配色了!
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是小五。
我們?cè)诶肞ython進(jìn)行數(shù)據(jù)可視化時(shí),有著大量的高質(zhì)量庫可以用,比如:Matplotlib、seaborn、Plotly、Bokeh、ggplot等等。但圖表好不好看,配色占一半。如果沒有良好的審美觀,很容易做出來的東西辣眼睛……
所以想做好數(shù)據(jù)可視化,就要有合適的配色方案。除了可以借鑒參考配色網(wǎng)站的案例,也可以自己自定義一套配色方案。

如何去自定義呢?
我倒是有一個(gè)想法,配色的美感需要培養(yǎng),但在一開始可以在優(yōu)秀的作品上尋找靈感,比如經(jīng)典電影、海報(bào)、風(fēng)景圖、Logo等等,這些都是絕佳的參考。
自然風(fēng)景的顏色往往令人驚艷,咱們不妨以風(fēng)景圖為例。下圖是一副海上夕陽圖,通過一番操作就提取到了一套配色方案(見圖右)。

那么,我們用Python能不能做到呢?
答案當(dāng)然是可以,畢竟Python除了不能生孩子,什么都能做!
提取圖片中的配色
在Python中對(duì)圖片進(jìn)行操作,最常用的兩個(gè)模塊就是PIL和opencv了。所以一開始我的方案是,用Python庫打開圖片,然后遍歷像素顏色,最后按照色彩比例進(jìn)行排序,即可得到該圖片的配色方案。

結(jié)果做到一半,我發(fā)現(xiàn)自己忽略了一件事。大家都知道,Python 是一門優(yōu)雅的語言,簡潔的語法,強(qiáng)大的功能。同時(shí)它還有擁有極其豐富的第三方庫,這些庫幾乎都可以在github 或者 pypi上找到源碼。
于是我搜了一下,確實(shí)有相關(guān)的庫可以提取圖片中的配色,那我們就不用重復(fù)造輪子了。
這個(gè)模塊就是——Haishoku,可以用于從圖像中獲取主色調(diào)和主要配色方案。

其GitHub網(wǎng)址為:https://github.com/LanceGin/haishoku

具體用法,還是先安裝
pip?install?haishoku
將前文提到的海上夕陽圖,保存到本地并命名為test.png。
from?haishoku.haishoku?import?Haishoku
image?=?'test.png'
haishoku?=?Haishoku.loadHaishoku(image)
導(dǎo)入模塊,運(yùn)行代碼會(huì)返回一個(gè)Haishoku實(shí)例,你可以通過實(shí)例屬性haishoku.dominant 和 haishoku.palette,從而直接獲取到對(duì)應(yīng)的主色調(diào)和配色方案。
主色調(diào)
首先,要怎么獲取圖片的主色調(diào)呢?
print(haishoku.dominant)
這返回了一個(gè)結(jié)構(gòu)為 (R, G, B) 的元組,就是該圖片的主色調(diào)。

運(yùn)行下面這行代碼
Haishoku.showDominant(image)
則會(huì)打開一個(gè)臨時(shí)文件,用來預(yù)覽主色調(diào)的顏色。

配色方案
#獲取配色方案
pprint.pprint(haishoku.palette)
返回一個(gè)結(jié)構(gòu)為:[(R, G, B), (R, G, B), …] 最大長度為8的數(shù)組。

這里使用了pprint模塊,對(duì)于這種多層嵌套的元組,正好可以美觀地打印出來。
運(yùn)行下面這行代碼
Haishoku.showPalette(image)
則會(huì)打開一個(gè)臨時(shí)文件,用來預(yù)覽圖片配色方案。(不會(huì)保存在本地)

就這樣,只需幾行代碼就提取到圖片中的配色方案,是不是很簡單。
另外,Haishoku庫從v1.1.4版本后,支持從 url 中直接加載圖像。
imagepath?=?'https://img-blog.csdnimg.cn/20190222215216318.png'
????
haishoku?=?Haishoku.loadHaishoku(imagepath)
配色方案與可視化
通過前面的操作,我們就提取到了合適的配色,那么就實(shí)戰(zhàn)一下吧。
經(jīng)典電影、海報(bào)、風(fēng)景圖、Logo都是絕佳的參考對(duì)象。

所以這次,我選擇了Google的Logo,并提取到它的配色方案。
imagepath?=?'google.png'
haishoku?=?Haishoku.loadHaishoku(imagepath)
pprint.pprint(haishoku.palette)
Haishoku.showPalette(imagepath)


那么,這套配色方案應(yīng)用到了數(shù)據(jù)可視化中,會(huì)是怎么樣呢??
用Python繪制一個(gè)餅圖試試看

感覺還不錯(cuò),這套配色方案我要收藏起來。如果大家覺得本文還不錯(cuò),記得給個(gè)一鍵三連!
對(duì)本文的代碼和文件感興趣的話,可以在本號(hào)【快學(xué)Python】后臺(tái)回復(fù)“配色”獲得
?

其實(shí)一開始,自己自定義提取圖片配色也不是一點(diǎn)用沒有,我還隨帶用OpenCV制作了一個(gè)拾色器。

也就是說,Python運(yùn)行時(shí)只需點(diǎn)擊,就可以獲取當(dāng)前圖片位置的顏色。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:
如何利用Python實(shí)現(xiàn)'2021年9月28日'轉(zhuǎn)換位為'2021/9/28'格式?
手把手教你用Python網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)上海證券交易所定期報(bào)告pdf文件下載(附代碼)

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說一兩句吧~
