pyechart绘制多图(三图及以上)的overlap叠加

pyechart github页面:https://github.com/pyecharts/pyecharts

首先要明确多图叠加到一个图的规则,即多个图只能有一个公共的轴:

  • 比如,横坐标含义相同(如时间维度)
  • 或者,纵坐标取值含义相同

多图共用一个Y轴

我们就以最简单的线条为例,只把最关键的代码写出来:

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Line
import numpy as np

x_dt = pd.date_range("2023-01-01", "2023-02-01").strftime("%Y-%m-%d").tolist()  # X轴的坐标时间
y1 = np.random.random(size=len(x_dt)) * 2
y2 = np.random.random(size=len(x_dt)) * 5
y3 = np.random.random(size=len(x_dt)) * 10

# 绘制y1
line_base = Line().add_xaxis(x_dt).add_yaxis("Y1", y1, yaxis_index=0)
line_base.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 绘制y2
line_2 = Line().add_xaxis(x_dt).add_yaxis("Y2", y2, yaxis_index=0)
line_2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 绘制y3
line_3 = Line().add_xaxis(x_dt).add_yaxis("Y3", y3, yaxis_index=0)
line_3.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 选中一个图,然后把其他的都overlap到这个图上
line_base.overlap(line_2)
line_base.overlap(line_3)

# 保存
line_base.render("many_line_overlap.html")

上述代码的效果如下:

在这里插入图片描述

多图用多个Y轴

通用流程是:

  1. 第一个图正常画
  2. 第一个图使用extend_axis()方法新添加一个轴,使用多次extend_axis()代表添加多个轴,多出来的这个轴可以作为另一个图不同值域的轴
  3. 第二个图使用yaxis_index属性把定义的y轴映射到第一个图新添加的轴上
  4. 使用图1.overlap(图2),将其变为一个图

示例1:图1单独用一个Y轴,图2、3合并用另一个Y轴

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Line
import numpy as np
from pyecharts import options as opt

x_dt = pd.date_range("2023-01-01", "2023-02-01").strftime("%Y-%m-%d").tolist()  # X轴的坐标时间
y1 = np.random.random(size=len(x_dt)) * 2
y2 = np.random.random(size=len(x_dt)) * 5
y3 = np.random.random(size=len(x_dt)) * 10

# 绘制y1
line_base = Line().add_xaxis(x_dt).add_yaxis("Y1", y1, yaxis_index=0)
line_base.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
line_base.extend_axis(yaxis=opt.AxisOpts(type_="value", name="y2、y3轴", position="right"), )

# 绘制y2
line_2 = Line().add_xaxis(x_dt).add_yaxis("Y2", y2, yaxis_index=1)
line_2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 绘制y3
line_3 = Line().add_xaxis(x_dt).add_yaxis("Y3", y3, yaxis_index=1)
line_3.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 选中一个图,然后把其他的都overlap到这个图上
line_base.overlap(line_2)
line_base.overlap(line_3)

# 保存
line_base.render("many_line_overlap.html")

如上代码效果如下:
在这里插入图片描述

示例1:图1单独用一个Y轴,图2用第二个Y轴,图3用第三个Y轴

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Line
import numpy as np
from pyecharts import options as opt

x_dt = pd.date_range("2023-01-01", "2023-02-01").strftime("%Y-%m-%d").tolist()  # X轴的坐标时间
y1 = np.random.random(size=len(x_dt)) * 2
y2 = np.random.random(size=len(x_dt)) * 5
y3 = np.random.random(size=len(x_dt)) * 10

# 绘制y1
line_base = Line().add_xaxis(x_dt).add_yaxis("Y1", y1, yaxis_index=0)
line_base.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
line_base.extend_axis(yaxis=opt.AxisOpts(type_="value", name="y2专用轴", position="right"), ) # 这是额外添加的第一个轴
line_base.extend_axis(yaxis=opt.AxisOpts(type_="value", name="y3专用轴", position="right", offset=60), ) # 这是额外添加的第二个轴

# 绘制y2
line_2 = Line().add_xaxis(x_dt).add_yaxis("Y2", y2, yaxis_index=1)
line_2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 绘制y3
line_3 = Line().add_xaxis(x_dt).add_yaxis("Y3", y3, yaxis_index=2)
line_3.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 选中一个图,然后把其他的都overlap到这个图上
line_base.overlap(line_2)
line_base.overlap(line_3)

# 保存
line_base.render("many_line_overlap.html")

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_35757704/article/details/129276912