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轴
通用流程是:
- 第一个图正常画
- 第一个图使用extend_axis()方法新添加一个轴,使用多次extend_axis()代表添加多个轴,多出来的这个轴可以作为另一个图不同值域的轴
- 第二个图使用yaxis_index属性把定义的y轴映射到第一个图新添加的轴上
- 使用图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")