目录
概述
并行多图(Grid())
顺序多图(Page())
选项卡多图(Tab())
时间线轮播图(Timeline())
总结
pyecharts支持绘制组合图表,即同一画布显示的多个图表。
多个图表按照不同的组合方式,可以分为并行多图、顺序多图、选项卡多图和时间轮播多图。
add(
chart, # 表示图表,仅 `Chart` 类或者其子类
grid_opts, # 表示直角坐标系配置项
grid_index=0, # 表示直角坐标系网格索引,默认为0
is_control_axis_index=False # 表示是否由自己控制坐标轴索引
)
# 直角坐标系配置项
class GridOpts(
# 是否显示直角坐标系网格。
is_show: bool = False,
# 所有图形的 zlevel 值。
z_level: Numeric = 0,
# 组件的所有图形的z值。
z: Numeric = 2,
# grid 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Union[Numeric, str, None] = None,
# grid 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Union[Numeric, str, None] = None,
# grid 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Union[Numeric, str, None] = None,
# grid 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Union[Numeric, str, None] = None,
# grid 组件的宽度。默认自适应。
width: Union[Numeric, str, None] = None,
# grid 组件的高度。默认自适应。
height: Union[Numeric, str, None] = None,
# grid 区域是否包含坐标轴的刻度标签。
is_contain_label: bool = False,
# 网格背景色,默认透明。
background_color: str = "transparent",
# 网格的边框颜色。支持的颜色格式同 backgroundColor。
border_color: str = "#ccc",
# 网格的边框线宽。
border_width: Numeric = 1,
# 本坐标系特定的 tooltip 设定。
tooltip_opts: Union[TooltipOpts, dict, None] = None,
)
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Grid
# 准备数据
x_data = ['小米','三星','华为','苹果','魅族','VIVO','OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar() # 创建Bar类对象
.add_xaxis(x_data) # 横坐标上的数据
.add_yaxis(
"商家A", # 图例
y_a # 系列数据
)
.add_yaxis(
"商家B",# 图例
y_b # 系列数据
)
.set_global_opts( # 全局配置项
title_opts=opts.TitleOpts(title="组合图表-柱形图") # 标题,可\n换行
)
)
line = (
Line() # 创建Line类对象
.add_xaxis(x_data) # # 横坐标上的数据
.add_yaxis("商家A", y_a)
.add_yaxis("商家B",y_b)
.set_global_opts(
title_opts=opts.TitleOpts(title="组合图表-折线图",
pos_top="48%"
# title 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
),
legend_opts=opts.LegendOpts(pos_top="48%")
)
)
grid = (
Grid() # 创建Grid类对象
.add(
bar, # bar子类
grid_opts=opts.GridOpts(pos_bottom="60%")
)
.add(
line, # line子类
grid_opts=opts.GridOpts(pos_top="60%")
)
)
# grid.render("./并行多图示例.html")
grid.render_notebook()
Page(
page_title="Awesome-pyecharts", # 表示HTML网页的标题。
js_host= "", # 表示远程的主机地址,默认为"https://assets.pyecharts.org/assets/"。
interval=1, # 表示每个图例之间的间隔,默认为1。
layout=PageLayoutOpts() # 表示布局配置项。
)
def add(*charts) # charts: 任意图表实例
# 布局配置项
class PageLayoutOpts(
# 配置均为原生 CSS 样式
justify_content: Optional[str] = None,
margin: Optional[str] = None,
display: Optional[str] = None,
flex_wrap: Optional[str] = None,
)
# 顺序多图
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Page
# 准备数据
x_data = ['小米','三星','华为','苹果','魅族','VIVO','OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar() # 创建Bar类对象
.add_xaxis(x_data) # 横坐标上的数据
.add_yaxis(
"商家A", # 图例
y_a # 系列数据
)
.add_yaxis(
"商家B",# 图例
y_b # 系列数据
)
.set_global_opts( # 全局配置项
title_opts=opts.TitleOpts(title="组合图表-柱形图") # 标题,可\n换行
)
)
line = (
Line() # 创建Line类对象
.add_xaxis(x_data) # # 横坐标上的数据
.add_yaxis("商家A", y_a)
.add_yaxis("商家B",y_b)
.set_global_opts(
title_opts=opts.TitleOpts(title="组合图表-折线图") # 标题
)
)
page = (
Page()
.add(
line,bar # charts: 任意图表实例
)
)
# page.render("./顺序多图示例.html")
page.render_notebook()
Tab(
page_title="Awesome-pyecharts", # HTML 标题
js_host="" # 远程 HOST,默认为 "https://assets.pyecharts.org/assets/"
)
add(
chart, # 任意图表类型
tab_name # 选项卡的标签名称
)
# 绘制选项卡多图
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Tab
# 准备数据
x_data = ['小米', '三星', '华为', '苹果', '魅族', 'VIVO', 'OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar()# 创建Bar类对象
.add_xaxis(x_data) # 横坐标的数据
.add_yaxis("商家A", y_a) # 图例,系列数据
.add_yaxis("商家B", y_b)
)
line = (
Line() # 创建Line类对象
.add_xaxis(x_data) # 横坐标的数据
.add_yaxis("商家A", y_a)# 图例,系列数据
.add_yaxis("商家B", y_b)
)
tab = (
Tab() # 创建Tab类对象
.add(
bar, # 图表类型
"柱形图" # 选项卡的标签名称
)
.add(line,"折线图")
)
# tab.render("./选项卡多图示例.html")
tab.render_notebook()
add_schema(
axis_type="category", # 表示坐标轴的类型1,可以取值为'value'(数值轴)、
# 'category'(类目轴)、'time'(时间轴)、'log'(对数轴)
orient="horizontal", # 表示时间线的类型,可以取值为'horizontal'(水平)和'vertical(垂直)。
play_interval=None, # 表示播放的速度(跳动的间隔),单位为ms。
is_auto_play=False, # 表示是否自动播放,默认为False
is_loop_play=True, # 表示是否循环播放,默认为True
is_rewind_play=False, # 表示是否反向播放,默认为False
is_timeline_show=True, # 表示是否显示时间线组件,默认为True,如果设置为 false,不会显示,但是功能还存在。
is_inverse=False, # 是否反向放置 时间线,反向则首位颠倒过来
symbol=None, # timeline 标记的图形。# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond',.
symbol_siz =None, # timeline 标记的大小,例如 [20, 10] 表示标记宽为 20,高为 10。
control_position="left", # 表示播放按钮的位置。可选值:'left'、'right'。
width=None, # 时间轴区域的宽度, 影响垂直的时候时间轴的轴标签和轴之间的距离
height=None, # 时间轴区域的高度
pos_left=None,# Timeline 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐
# pos_right、pos_top、pos_bottom
linestyle_opts=None, # 时间轴的坐标轴线配置,
controlstyle_opts= None,# 控制按钮』的样式。『控制按钮』包括:『播放按钮』、『前进按钮』、『后退按钮』。
)
add(
chart, # 表示图表
time_point # 表示时间点
)
# 绘制时间线轮播图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar,Timeline
x = Faker.choose() # 准备x轴数据
tl_demo = Timeline() # 创建Timeline类对象
for i in range(2015,2020):
bar = (
Bar() # 创建Bar类对象
.add_xaxis(x) # 横坐标的数据
.add_yaxis(
"商家A", # 图例
Faker.values() # 系列数据
)
.add_yaxis("商家B",Faker.values())
.set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)) # 标题
)
)
tl_demo.add(
bar, # 图例
"{}年".format(i) # 时间线标签
)
tl_demo.render("./时间线轮播图示例.html")
tl_demo.render_notebook()
今天主要使用pyecharts绘制了常用的组合图表,可以照着案例多加练习。