社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

一款 Python 神器搞定自动化图表配色!

AirPython • 3 年前 • 691 次点击  

大家好,我是安果!

我们在利用Python进行数据可视化时,有着大量的高质量库可以用,比如:MatplotlibseabornPlotlyBokehggplot等等。但图表好不好看,配色占一半。如果没有良好的审美观,很容易做出来的东西辣眼睛……

所以想做好数据可视化,就要有合适的配色方案。除了可以借鉴参考配色网站的案例,也可以自己自定义一套配色方案。

如何去自定义呢?

我倒是有一个想法,配色的美感需要培养,但在一开始可以在优秀的作品上寻找灵感,比如经典电影、海报、风景图、Logo等等,这些都是绝佳的参考。

自然风景的颜色往往令人惊艳,咱们不妨以风景图为例。下图是一副海上夕阳图,通过一番操作就提取到了一套配色方案(见图右)。

那么,我们用Python能不能做到呢?

答案当然是可以,毕竟Python除了不能生孩子,什么都能做!

提取图片中的配色

在Python中对图片进行操作,最常用的两个模块就是PIL和opencv了。所以一开始我的方案是,用Python库打开图片,然后遍历像素颜色,最后按照色彩比例进行排序,即可得到该图片的配色方案。

结果做到一半,我发现自己忽略了一件事。大家都知道,Python 是一门优雅的语言,简洁的语法,强大的功能。同时它还有拥有极其丰富的第三方库,这些库几乎都可以在github 或者 pypi上找到源码。

于是我搜了一下,确实有相关的库可以提取图片中的配色,那我们就不用重复造轮子了。

这个模块就是——Haishoku,可以用于从图像中获取主色调和主要配色方案。

其GitHub网址为:https://github.com/LanceGin/haishoku

具体用法,还是先安装

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) 的元组,就是该图片的主色调。

运行下面这行代码

Haishoku.showDominant(image)

则会打开一个临时文件,用来预览主色调的颜色。

主色调(最多的颜色)

配色方案

#获取配色方案
pprint.pprint(haishoku.palette)

返回一个结构为:[(R, G, B), (R, G, B), …] 最大长度为8的数组。

这里使用了pprint模块,对于这种多层嵌套的元组,正好可以美观地打印出来。

运行下面这行代码

Haishoku.showPalette(image)

则会打开一个临时文件,用来预览图片配色方案。(不会保存在本地)

配色方案

就这样,只需几行代码就提取到图片中的配色方案,是不是很简单。

另外,Haishoku库从v1.1.4版本后,支持从 url 中直接加载图像。

imagepath = 'https://img-blog.csdnimg.cn/20190222215216318.png'
    
haishoku = Haishoku.loadHaishoku(imagepath)

配色方案与可视化

通过前面的操作,我们就提取到了合适的配色,那么就实战一下吧。

经典电影、海报、风景图、Logo都是绝佳的参考对象。

所以这次,我选择了Google的Logo,并提取到它的配色方案。

imagepath = 'google.png'

haishoku = Haishoku.loadHaishoku(imagepath)

pprint.pprint(haishoku.palette)

Haishoku.showPalette(imagepath)

那么,这套配色方案应用到了数据可视化中,会是怎么样呢??

这次用刚才得到的Google配色,Python绘制一个环形图试试看

感觉还不错,这套配色方案我要收藏起来。如果大家觉得本文还不错,记得给个一键三连!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121552
 
691 次点击