别再问我Python可视化如何配色了!
共 2399字,需浏览 5分钟
· 2021-10-22
回复“书籍”即可获赠Python从入门到进阶共10本电子书
大家好,我是小五。
我们在利用Python进行数据可视化时,有着大量的高质量库可以用,比如:Matplotlib、seaborn、Plotly、Bokeh、ggplot等等。但图表好不好看,配色占一半。如果没有良好的审美观,很容易做出来的东西辣眼睛……
所以想做好数据可视化,就要有合适的配色方案。除了可以借鉴参考配色网站的案例,也可以自己自定义一套配色方案。
![](https://filescdn.proginn.com/15fd0e24e1b457a13da419e0a1b1f08b/979317d9fee70ec6d28bfb654671a714.webp)
如何去自定义呢?
我倒是有一个想法,配色的美感需要培养,但在一开始可以在优秀的作品上寻找灵感,比如经典电影、海报、风景图、Logo等等,这些都是绝佳的参考。
自然风景的颜色往往令人惊艳,咱们不妨以风景图为例。下图是一副海上夕阳图,通过一番操作就提取到了一套配色方案(见图右)。
![](https://filescdn.proginn.com/a78ad4fc84fb4f5e4ab32b02dd08f585/6c8934c95cd8622251286d7da3ddffa8.webp)
那么,我们用Python能不能做到呢?
答案当然是可以,毕竟Python除了不能生孩子,什么都能做!
提取图片中的配色
在Python中对图片进行操作,最常用的两个模块就是PIL和opencv了。所以一开始我的方案是,用Python库打开图片,然后遍历像素颜色,最后按照色彩比例进行排序,即可得到该图片的配色方案。
结果做到一半,我发现自己忽略了一件事。大家都知道,Python 是一门优雅的语言,简洁的语法,强大的功能。同时它还有拥有极其丰富的第三方库,这些库几乎都可以在github 或者 pypi上找到源码。
于是我搜了一下,确实有相关的库可以提取图片中的配色,那我们就不用重复造轮子了。
这个模块就是——Haishoku,可以用于从图像中获取主色调和主要配色方案。
![](https://filescdn.proginn.com/71b4ec40be2800448a1a52d13590c95c/1f713065f3fde35ad52fec4fe98edaf0.webp)
其GitHub网址为:https://github.com/LanceGin/haishoku
![](https://filescdn.proginn.com/80d8a74dd4364e1b77c494bae4d4d9be/e4faa9e08220a65aafacf485375fe4c8.webp)
具体用法,还是先安装
pip install haishoku
将前文提到的海上夕阳图,保存到本地并命名为test.png
。
from haishoku.haishoku import Haishoku
image = 'test.png'
haishoku = Haishoku.loadHaishoku(image)
导入模块,运行代码会返回一个Haishoku实例,你可以通过实例属性haishoku.dominant
和 haishoku.palette
,从而直接获取到对应的主色调和配色方案。
主色调
首先,要怎么获取图片的主色调呢?
print(haishoku.dominant)
这返回了一个结构为 (R, G, B) 的元组,就是该图片的主色调。
![](https://filescdn.proginn.com/d25a1206d32530aba217c9bc8ed037c2/eb8965b1e7fb613c547584672d63fa11.webp)
运行下面这行代码
Haishoku.showDominant(image)
则会打开一个临时文件,用来预览主色调的颜色。
![](https://filescdn.proginn.com/2791b8e53209b23f8faf11a018c8e46e/fce129b20fa9cc969135f4fddc0b8ea4.webp)
配色方案
#获取配色方案
pprint.pprint(haishoku.palette)
返回一个结构为:[(R, G, B), (R, G, B), …] 最大长度为8的数组。
![](https://filescdn.proginn.com/10c34e62263f13f10682c05a230ebc1b/5c483e23e31b4fc36d3f935e548e8cd2.webp)
这里使用了pprint
模块,对于这种多层嵌套的元组,正好可以美观地打印出来。
运行下面这行代码
Haishoku.showPalette(image)
则会打开一个临时文件,用来预览图片配色方案。(不会保存在本地)
![](https://filescdn.proginn.com/531934400eb6ffb33a1d0011b5022926/95c50155fbb0af2f28a58dcfbd322209.webp)
就这样,只需几行代码就提取到图片中的配色方案,是不是很简单。
另外,Haishoku库从v1.1.4
版本后,支持从 url 中直接加载图像。
imagepath = 'https://img-blog.csdnimg.cn/20190222215216318.png'
haishoku = Haishoku.loadHaishoku(imagepath)
配色方案与可视化
通过前面的操作,我们就提取到了合适的配色,那么就实战一下吧。
经典电影、海报、风景图、Logo都是绝佳的参考对象。
![](https://filescdn.proginn.com/9ed006df0699fac5c7672f7027412529/a9bf27e77060f800570385ffaf2d9a84.webp)
所以这次,我选择了Google的Logo,并提取到它的配色方案。
imagepath = 'google.png'
haishoku = Haishoku.loadHaishoku(imagepath)
pprint.pprint(haishoku.palette)
Haishoku.showPalette(imagepath)
![](https://filescdn.proginn.com/83ff3d7505be5f9173bb64c187994a6b/c54f147bea59fc7e0adb04e1440e4026.webp)
![](https://filescdn.proginn.com/46c7dc0a3b9da93fe4beb3da0f625c40/f4734d74517a964daef7519ba0173909.webp)
那么,这套配色方案应用到了数据可视化中,会是怎么样呢??
用Python绘制一个饼图试试看
![](https://filescdn.proginn.com/021654d49a2778f901b7763ff49077a7/5a0a3a018f8ef2aafb0c8dec38c9044c.webp)
感觉还不错,这套配色方案我要收藏起来。如果大家觉得本文还不错,记得给个一键三连!
对本文的代码和文件感兴趣的话,可以在本号【快学Python】后台回复“配色”获得
![](https://filescdn.proginn.com/deecb9307e528d73a5140ed5fc62e04f/a6352c65f442734a0df3c74cf8679d9f.webp)
其实一开始,自己自定义提取图片配色也不是一点用没有,我还随带用OpenCV制作了一个拾色器。
![](https://filescdn.proginn.com/893572088ec56813cd29cf30d93b94fb/4fd9112740e3bac4d80130b72c64c31a.webp)
也就是说,Python运行时只需点击,就可以获取当前图片位置的颜色。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
![](https://filescdn.proginn.com/3a3c8d1a39c8b56e65a41ebc2d42fd06/98cdc8935c4448fad5349143dd44db39.webp)
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~