问题
用pyecharts绘制叠加图时,如折线图上叠加散点图时,分别设置了自己的颜色(三角是绿色,圆形是蓝色),但是渲染颜色和图例颜色不一致,如下图所示,折线颜色和散点颜色相同。
解决1
这种情况,可以在折线图绘制时,在add_yaxis中增加linestyle_opts=opts.LineStyleOpts(color=‘red’)参数来设置折线颜色,结果如下图所示
解决2
但是如果叠加的图有点多,比如叠加了两种散点图,就无法区别两种散点图了,如下图:
该图为了方便查看,用不同的符号形状来区分了两种散点图,但是他们的颜色是一样的。究其原因是因为叠加用overlap将多个图放在一个图像上显示,并且在最底图层上增加了全局的可视映射visualmap_opts=opts.VisualMapOpts(is_show=True)。如上图是将两个散点图加到了折线图上,在绘制折线图时设置了该参数,即便该参数中的is_show=False,也会出现上述的结果,只是少了上图左下角的色标。所以简单粗暴一些,直接删除。结果如下图:
上图也和我们想要的结果不一致(最初设置的三角是绿色,圆形是蓝色的),图中三角是蓝色,圆形的颜色是自动新加的颜色。仔细看图标会发现,第一个折线的图例是一条线加一个圆圈,但是圆圈是绿色的,这正是我们给三角设置的颜色,这是因为在绘制折线时默认每个点用圆圈来标记,为了好看,我们在绘制折线图时将这个圆圈设置不显示(is_symbol_show=False),但是它有颜色的,它是设置颜色中的倒数第三位(echarts机制,默认几个颜色,之后设置的颜色都加到最后面),所以在绘制折线图时将该圆圈的颜色设置为和线的颜色相同或者其他颜色,让它占颜色位置。设置后的结果图如下:
这里我给折线上的圆圈颜色设置为pink, 添加到add_yaxis中的参数代码为:color=‘pink’
完整代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ----------------------------------
# @Time : 2024/3/11 14:41
# @File : ab_ana_0304 - test.py
# Description :
# ----------------------------------
from pyecharts.charts import Line, Scatter
import pyecharts.options as opts
linex = []
liney = []
scatter1x = []
scatter1y = []
scatter2x = []
scatter2y = []
line = (Line()
.add_xaxis(linex)
.add_yaxis('value', liney, color='pink', is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(color='red'))
.set_global_opts(title_opts=opts.TitleOpts(title="{}指标数据趋势图".format(00)),
yaxis_opts=opts.AxisOpts(min_=10, max_=20),
datazoom_opts=opts.DataZoomOpts(), # 添加数据缩放
# visualmap_opts=opts.VisualMapOpts(is_show=False)
)
)
ab_scatter1 = (
Scatter()
.add_xaxis(scatter1x)
.add_yaxis("abnormal point1", y_axis=scatter1y,
symbol_size=10, # 设置散点的大小
symbol='triangle',
label_opts=opts.LabelOpts(is_show=False),
color='green'
)
.set_series_opts()
.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
)
# 异常点展示
ab_scatter2 = (
Scatter()
.add_xaxis(xaxis_data=scatter1y)
.add_yaxis(series_name="abnormal point2",
y_axis=scatter2y,
symbol='circle',
color='blue'
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
)
# 将散点图叠加在折线图上
# 使用Overlap组件创建复合图表
line.overlap(ab_scatter1)
line.overlap(ab_scatter2)
line.render("颜色测试.html")