pyecharts.charts的Grid类表示并行排列的组合图表,它可以采用左右布局或上下布局的方式显示多个图表。Grid类中包含一个add()方法,使使用add()方法可以为组合图表添加配置项。 add()方法的语法格式如下:
add(self, chart, grid_opts, grid_index=0,is_control_axis_index=False)
该方法的参数含义如下。
chart:表示图表。
grid_opts:表示直角坐标系配置项。
grid_index:表示直角坐标系网格索引,默认为0。
is_control_axis_index:表示是否由自己控制坐坐标轴索引,默认为False。
#导入模版
#from pyecharts.faker import Faker
#from pyecharts import options as opts
#from pyecharts.charts import Bar,Grid, Line,Pie,Radar,Timeline
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Pie,Radar
#绘制柱形图
x_data = ["2014","2015","2016","2017","2018","2019","2020","2021"]
value_1 =[87430, 90912,96225,101885,107147,116390,105764,120215]
value_2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.31,13.66]
bar = (
Bar() #设置柱形图宽度与高度
.add_xaxis(xaxis_data=x_data) #添加x轴的数据
.add_yaxis(
series_name="诊疗量(万人次)", #图例
y_axis=value_1,
color='orange',#y轴的柱形图数据
yaxis_index=1, #表示y轴的索引,用于拥有多个y轴的单图表中。
label_opts=opts.LabelOpts(is_show=False), # 不显示数据标签
)
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)", #y轴名称
type_="value",
position="left" #位于y轴左侧
)
)
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)", #y轴名称
type_="value",
min_=-20, #y轴最小值:-20
max_=20, #y轴最大值:20
position="right", #位于y轴右侧
)
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",
pos_left='center'), #标题名称
legend_opts=opts.LegendOpts(is_show=False), #不显示图例
)
.set_series_opts(
itemstyle_opts=opts.ItemStyleOpts( #图元样式配置项
opacity=0.5), #设置柱形图透明度:0.5
)
)
line = (
Line() #创建Line类的对象
.add_xaxis(x_data) #添加x轴的数据
.add_yaxis(
series_name="同比增速(%)", #图例名:同比增速(%)
y_axis=value_2, #y轴折线图数据
yaxis_index=2, #表示y轴的索引,用于拥有多个y轴的单图表中。
)
)
#堆积柱形图
x_data=['2019年','2020年','2021年','2022年','2023年']
data1 = [20.3,22.0,23.5,22.5,22.3] # 跨国企业占比
data2 = [79.7,78.0,76.5,77.5,77.7] # 本土企业占比
zhu = (
Bar()
.add_xaxis(x_data)
.add_yaxis("跨国企业占比", data1, stack="stack1", category_gap="30%",color='blue', #stack="stack1":堆积柱形图
xaxis_index=1,
yaxis_index=3,
label_opts=opts.LabelOpts(is_show=False) #不显示柱形图数据
)
.add_yaxis("本土企业占比", data2, stack="stack1", category_gap="50%",color='orange',
xaxis_index=1,
yaxis_index=3,
label_opts=opts.LabelOpts(is_show=False) #不显示柱形图数据
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比", #标题名称
pos_left='40%',
pos_top="52%"),
legend_opts=opts.LegendOpts(is_show=False ), #不显示图例
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), #显示提示框组件
yaxis_opts=opts.AxisOpts(min_=0,max_=100, #y轴刻度范围0—100
interval=25 #y轴刻度范围分为25一组
),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45) #x轴标签旋转45°
)
)
)
# 绘制环形图
#添加标签与数值
labels=[('20岁以下',2.2),
('20-30岁',27.9),
('31-40岁',56.2),
('41-50岁',10.9),
('51岁以上',2.8)]
pie = (
Pie() #创建Pie类的对象
.add(
"",
labels, #标签与数值
center=["20%", "80%"], # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
radius=["10%", "30%"] #饼图的半径,数组的第一项是内半径,第二项是外半径
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="中药材消费者画像",
pos_left='10%',
pos_top="52%",
is_show=True, #显示标题
),
legend_opts=opts.LegendOpts(is_show=False, ) #不展示图例
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))
)
zhe=bar.overlap(line)
#创建一个组合图表实例
grid = (
Grid()
.add( zhe,
grid_opts=opts.GridOpts(pos_bottom="60%"), #grid 组件离容器下侧的距离
is_control_axis_index=True
)
.add(zhu,
grid_opts=opts.GridOpts(pos_bottom="10%",
pos_top="60%",
pos_left="40%",
pos_right="35%"
),
is_control_axis_index=True
)
.add(pie,
grid_opts=opts.GridOpts(pos_bottom="5%",
pos_top="60%",
pos_left="10%",
pos_right="70%"),
is_control_axis_index=True
)
)
grid.render_notebook()
# 绘制时间线轮播图(未完成)
#x = Faker.choose() # 准备x轴数据
#tl_demo = Timeline() # 创建Timeline类对象
#for i in range(2015,2020):
# bar = (
# Bar() # 创建Bar类对象
# .add_xaxis(x_data) # 横坐标的数据
# .add_yaxis(
# ".", # 图例
# Faker.values() # 系列数据
# )
# .add_yaxis(".",Faker.values())
# .set_global_opts(title_opts=opts.TitleOpts("2014-2021年中国中医类医疗卫生机构诊疗#量".format(i)) # 标题
)
# )
# tl = Timeline()
# tl.add(bar, "bar")
# tl.add(line, "line")
# tl.add(pie, "pie")
# tl.add(line, "line")
#
#tl_demo.render("./时间线轮播图示例.html")
#tl_demo.render_notebook()
时间线轮播多图
pyecharts.charts的Timeline类表示按时间线轮播的组合图表,它可以通过单击时间线的不同时间来切换显示多个图表。Timeline类中提供了两种重要的方法:add_schema()和add()。
1.add_schema() 方法
add_schema()方法用于为图表添加指定样式的时间线,其语法格式如下所示::
add_schema(self, axis_type="category", orient="horizontal", symbol=None,
symbol_size-None, play_interval=None, is_auto_play=False,
is_loop_play=True, is_rewind_play=False, is_timeline_show=True,
is_inverse=False, pos_left=None, pos_right=None, pos_top=None,
pos_bottom="-5px", width=None, height=None, linestyle_opts=None,
label_opts=None, itemstyle_opts=None)
该方法常用参数的含义如下。
axis_type:表示坐标轴的类型,可以取值为value(数值轴)、category(类目轴)、time(时间轴)、log(对数轴)。
orient:表示时间线的类型,可以取值为horizontal(水平)和 vertical(垂直)。
play_interval:表示播放的速度(跳动的间隔),单位为ms。
is_auto_play:表示是否自动播放,默认为False。
is_loop_play:表示是否循环播放,默认为True。
is_rewind_play:表示是否反向播放,默认为False。
is_timeline_show:表示是否显示时间线组件。
width:表示时间线区域的宽度。
height:表示时间线区域的高度。
2.add()方法
add()方法用于添加图表和时间点,其语法格式如下所示:
add(self, chart, time_point)
该方法的参数chart表示图表,time_point表示时间点。
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Page, Tab, Timeline
from pyecharts.faker import Faker
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
)
line = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
line1 = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
line2 = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
# 通过联合控制pos_bottom, pos_top, pos_left, pos_right这四个参数,
# 可以精细控制在图例在画布中的任意布局。
legend_opts=opts.LegendOpts(
pos_bottom="10%",pos_top="70%",
pos_left="75%",pos_right="5%",
# 通过控制图例里面的文字字号大小和矩形块大小,实现整个图例到缩放
textstyle_opts= opts.TextStyleOpts(font_size=5),
item_width=10,item_height=5,
),
)
)
# 【组合图表: 轮播多图】
tl = Timeline()
tl.add(bar, "bar")
tl.add(line, "line")
tl.add(line1, "line1")
tl.add(line2, "line2")
tl.render_notebook()