博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【pyecharts | 颜色配置】关于pyecharts中自定义颜色问题详解
阅读量:3729 次
发布时间:2019-05-22

本文共 5761 字,大约阅读时间需要 19 分钟。

前言

  • 最近微信上经常有小伙伴问到pyecharts颜色配置的问题,其实pyecharts颜色配置很简单,不过由于可以配置的方式有点多,经常让人混淆,所以本文汇总一下在pyecharts中可以配置的颜色的方法,简单做个对比!

  • 本文notebook版本链接:

准备工作

模块导入

from pyecharts.charts import *from pyecharts import options as opts

示例数据

# 虚假数据x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']y_data_1 = [123, 153, 89, 107, 98, 23]y_data_2 = [32, 213, 60, 167, 142, 45]

默认效果

当我们没做任何设置时,颜色如下。

bar = Bar()bar.add_xaxis(      x_data      )bar.add_yaxis(      '系列1',       y_data_1,      )bar.add_yaxis(      '系列2',       y_data_2,      )bar.render_notebook()

在这里插入图片描述

pyecharts会有一个默认「颜色池」(我们姑且这么称呼),可以通过语句print(chart.options['color'])打印出来。

当我们添加多个系列的数据并且没有任何设置颜色的时候,便会依次从这个「颜色池」中拾取颜色。


比如我们刚刚的bar的「颜色池」:

  • 系列1的颜色便是bar.options['color']中的第一个颜色;

    Image Name

  • 系列2的颜色便是bar.options['color']中的第二个颜色;

    Image Name

print(bar.options['color'])"""打印结果:['#c23531', '#2f4554', '#61a0a8', '#d48265', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3', '#f05b72', '#ef5b9c', '#f47920', '#905a3d', '#fab27b', '#2a5caa', '#444693', '#726930', '#b2d235', '#6d8346', '#ac6767', '#1d953f', '#6950a1', '#918597']"""

直角坐标系

设置系列颜色

直角坐标系设置一个系列的颜色很简单,在.add_yaxis()通过color参数可以直接设置,我们可以使用颜色格式由如下四种:

  • 常见的颜色可以直接通过yellowred等英文设置:color='red'

  • RGB格式:color='rgb(199, 0, 0)'

  • RGBA格式,最后一个值为颜色透明度:color='rgb(199, 0, 0,0.2)'

  • 十六进制颜色码:color='#61a0a8'

示例

bar = Bar()bar.add_xaxis(    x_data)bar.add_yaxis(    '',    y_data_1,    color='red')bar.add_yaxis(    '',    y_data_2,    color='rgb(199, 0, 0, 0.2)')bar.render_notebook()

在这里插入图片描述

我们同样打印bar.options['color']

print(bar.options['color'])"""打印结果['rgb(199, 0, 0, 0.2)', 'red', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3', '#f05b72', '#ef5b9c', '#f47920', '#905a3d', '#fab27b', '#2a5caa', '#444693', '#726930', '#b2d235', '#6d8346', '#ac6767', '#1d953f', '#6950a1', '#918597']"""

可以看到我们在.add_yaxis()设置的颜色都是插入到这个list之中。


但是当我们使用组合图表(通过Grid或者overlap)的时候,这个方法可能就「失效」了。

overlap错误配置示范

bar_1 = Bar()bar_1.add_xaxis(    x_data)bar_1.add_yaxis(    '系列1',    y_data_1,    color='red')bar_2 = Bar()bar_2.add_xaxis(    x_data)bar_2.add_yaxis(    '系列2',    y_data_2,    color='rgb(199, 0, 0, 0.2)')bar_1.overlap(bar_2)bar_1.render_notebook()

在这里插入图片描述

grid错误配置示范

bar_1 = Bar()bar_1.add_xaxis(    x_data)bar_1.add_yaxis(    '系列1',    y_data_1,    color='red')bar_2 = Bar()bar_2.add_xaxis(    x_data)bar_2.add_yaxis(    '系列2',    y_data_2,    color='rgb(199, 0, 0, 0.2)')grid = Grid()grid.add(bar_1, grid_index=0, grid_opts=opts.GridOpts(pos_right="5%", pos_left="55%"))grid.add(bar_2, grid_index=1, grid_opts=opts.GridOpts(pos_right="55%", pos_left="5%"))grid.render_notebook()

在这里插入图片描述


因为组合图表相当于是两个图表实例组合成一个图表实例,不管是通过Grid还是overlap,所以他只会保留一个图表实例中的配置。

比如:

  1. a.overlap(b)最后的效果是a和b都使用a实例的配置;
  2. grid.add(a).add(b)最后的效果是a和b都适用a实例的配置;

所以便会出现在对b表设置了颜色在最后组合图表时却不见效果;


要避免组合图表时颜色配置失效的话需要通过itemstyle_opts来进行配置。

overlap正确配置示范

bar_1 = Bar()bar_1.add_xaxis(    x_data)bar_1.add_yaxis(    '系列1',    y_data_1,    itemstyle_opts=opts.ItemStyleOpts(color='red'))bar_2 = Bar()bar_2.add_xaxis(    x_data)bar_2.add_yaxis(    '系列2',    y_data_2,    itemstyle_opts=opts.ItemStyleOpts(color='rgb(199, 0, 0, 0.2)'))bar_1.overlap(bar_2)bar_1.render_notebook()

在这里插入图片描述

grid正确配置示范

bar_1 = Bar()bar_1.add_xaxis(    x_data)bar_1.add_yaxis(    '系列1',    y_data_1,    itemstyle_opts=opts.ItemStyleOpts(color='red'))bar_2 = Bar()bar_2.add_xaxis(    x_data)bar_2.add_yaxis(    '系列2',    y_data_2,    itemstyle_opts=opts.ItemStyleOpts(color='rgb(199, 0, 0, 0.2)'))grid = Grid()grid.add(bar_1, grid_index=0, grid_opts=opts.GridOpts(pos_right="5%", pos_left="55%"))grid.add(bar_2, grid_index=1, grid_opts=opts.GridOpts(pos_right="55%", pos_left="5%"))grid.render_notebook()

在这里插入图片描述

其他图表

如果是其他图表便没法像直角坐标系直接通过color参数来设置了。

提供两种方法来快速设置颜色。


.set_colors()

.set_colors()相当于将chart.options['color']的值进行了更新;

pie = Pie()pie.add(       '',        [list(z) for z in zip(x_data, y_data_1)],       )pie.set_colors(['red', 'blue', 'black', 'green', 'orange', 'yellow'])pie.render_notebook()

在这里插入图片描述

print(pie.options['color'])"""['red', 'blue', 'black', 'green', 'orange', 'yellow']"""

通过chartItem进行配置;

饼图
data_pair = []for k, v, c in zip(x_data, y_data_1, ['red', 'blue', 'black', 'green', 'orange', 'yellow']):    data_pair.append(opts.PieItem(        name=k,        value=v,        itemstyle_opts=opts.ItemStyleOpts(color=c)    ))pie = Pie()pie.add(       '',        data_pair,       )pie.render_notebook()

在这里插入图片描述

直方图

这种方法对于直角坐标系同样适用,可以针对单一数据项进行风格配置,不仅仅只是颜色。

data_pair = []for k, v, c in zip(x_data, y_data_1, ['red', 'blue', 'black', 'green', 'orange', 'yellow']):    data_pair.append(        opts.BarItem(            name=k,            value=v,            itemstyle_opts=opts.ItemStyleOpts(color=c)        ))bar = Bar()bar.add_xaxis(    x_data)bar.add_yaxis(    '系列1',    data_pair,    itemstyle_opts=opts.ItemStyleOpts(color='red'))bar.render_notebook()

在这里插入图片描述

通过视觉组件进行配置

除了以上的方法,我们还可以通过视觉组件来进行颜色配置;

视觉组件是根据每个数据项的值映射一个颜色。


  • 默认是渐变配色
bar = Bar()bar.add_xaxis(    x_data)bar.add_yaxis(    '',    y_data_1,)bar.add_yaxis(    '',    y_data_2,)bar.set_global_opts(    visualmap_opts=opts.VisualMapOpts(        is_show=True,        min_=50,        max_=200,        range_color=['green', 'yellow', 'red'])          )bar.render_notebook()

在这里插入图片描述

  • 颜色分段,譬如我们可以设置当值大于等于100时显示红色,小于100时显示橙色;
bar = Bar()bar.add_xaxis(    x_data)bar.add_yaxis(    '',    y_data_1,)bar.add_yaxis(    '',    y_data_2,)bar.set_global_opts(    visualmap_opts=opts.VisualMapOpts(        is_show=True,        is_piecewise=True,   # 颜色分段        pieces=[            {
"min": 100, "color": 'red'}, {
"max":100, "color": 'orange'} ] ) )bar.render_notebook()

在这里插入图片描述

总结

全文提供了5种方法实现颜色的配置:

  1. 直角坐标系图表可通过.add_yaxis()方法中的color参数进行设置;

  2. 通过.set_color()方法进行全局的颜色更新;

  3. 通过系列配置项itemstyle_opts进行颜色配置;

  4. 通过chartItem进行单个数据项的颜色配置;

  5. 通过视觉组件visualmap_opts根据数据项的数值大小进行颜色配置;

当以上方法同时存在时,作用的优先级为 5 > 4=3 > 2=1;

转载地址:http://keqnn.baihongyu.com/

你可能感兴趣的文章
在springBoot中使用Mapper类问题
查看>>
filebeat___log -input
查看>>
GitHub使用
查看>>
关于学习Java的一点点心得。附Dos命令的基操
查看>>
SpringCloud详细教程3-Eureka服务注册中心
查看>>
SpringMVC中常用的几个注解@RequestBody
查看>>
SpringCloud详细教程5-Eureka更多介绍
查看>>
SpringCloud详细教程6-Zookeeper
查看>>
Freemarker使用mht制作导出word模板
查看>>
Freemarker使用xml写word模板-遇到的坑
查看>>
PyQt5基础用法ui转py后需要修改的地方
查看>>
Scanner类
查看>>
基本类型包装类
查看>>
System类常用方法
查看>>
Runtime类、Math类和Random类的常用方法
查看>>
数据处理类常用方法
查看>>
Collections和Character类 常用静态方法
查看>>
HTML之Javascript——BOM浏览器对象模型
查看>>
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>