渲染图表
图表基类Base主要提供了两个渲染图表的方法:render()和render_notebook()。具体介绍如下:
1.render()方法
render(self,path="render.html",template_name="sinple_chart.html",env=None,**kwrgs)
以上的方法中的参数path表示生成文件的路径,默认为render.html;template_name表示模版的路径。redenr()方法会返回HTML文件的路径字符串。
2.render_notebook()方法
bar.render_notebook()
- 【pyecharts绘图思路】
- # 0.导入需要用到的图表类(Bar,Line,Scatter,Pie)
- # 1. 准备数据(数据爬取-数据清洗-数据结构化): 数据格式要符合传参的需求
- # 2.通过导入的图表类,创建图表实例
- # 3.往图表实例填充数据,即完成绘图
- # 4.设置“系列配置项”和“全局配置项”--> 可做可不做(类似于matplotlib的:图表辅助元素的定制和样式美化)
- # 5. 展示图表(渲染图表)
- 【pyecharts的常用的图表分成两大类】
- 1. 带x轴和y轴的直角坐标系图表(柱形图,折线图,散点图,箱型图)
- .add_xaxis()
- .add_yaxis()
- 2. 不带x轴和y轴的基本图表(饼图,环图,词云图,桑基图,漏斗图, 雷达图)
- .add()
实例一:
绘制饼图或环形图
pyecharts的Pis类表示饼图,该类中提供可一个add()方法,使用add()方法可以为饼图添加数据和配置项。add()方法的语法格式如下:
add(self,series_name,data_pair,color=None,radius=None,center=None,rosetype=None,is_clockwise=Ture,label_opts=opts.LabaelOpts(),tooltip_opts=None,itemstyle_opts=None)
基于pyecharts,用环图展示
表2. 中药材消费者画像数据
年龄 | 占比(%) |
20岁以下 | 2.2 |
20-30岁 | 27.9 |
31-40岁 | 56.2 |
41-50岁 | 10.9 |
51岁以上 | 2.8 |
from pyecharts import options as opts
from pyecharts.charts import Pie#导入pie模块(Bar,Line)
from pyecharts.faker import Faker
#1.数据准备
age_data = [("20岁以下", 2.2), ("20-30岁", 27.9), ("31-40岁", 56.2), ("41-50岁", 10.9), ("51岁以上", 2.8)]
c = (
Pie()
.add(
"",age_data,
radius=["40%", "75%"],#环图内直径与外直径(50%是画布的一半)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="中药材消费者画像数据"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()
实例二:
基于pyecharts,用堆积柱形图展示
表3. 全国药店中药饮片供应商占比情况
年份(年) | 跨国企业占比(%) | 本土企业占比(%) |
2019 | 20.3 | 79.7 |
2020 | 22.0 | 78.0 |
2021 | 23.5 | 76.5 |
2022 | 22.5 | 77.5 |
2023 | 22.3 | 77.7 |
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
#数据准备
year_data = [2019,2020,2021,2022,2023]
data1 = [20.0,22.0,23.5,22.5,22.3]
data2 = [79.7,78.0,76.5,77.5,77.7]
#导入相对应的数据
bar_stack = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add_xaxis(year_data)
.add_yaxis("跨国企业占比(%)", data1, stack="stack1", category_gap="60%")
.add_yaxis("本土企业占比(%)", data2, stack="stack1", category_gap="60%")
.set_series_opts(
label_opts=opts.LabelOpts(
position="top")
)
.set_global_opts(title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况"))
)
#渲染图表
bar_stack.render_notebook()
实例三:
基于pyecharts,用柱形图和折线图展示
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
#准备数据
x_data=["2014年","2015年","2016年","2017年","2018年","2019年","2020年","2021年"]
y1=[87430, 90912, 96225, 101885, 107147, 116390 ,105764 , 120215]
y2=[7.40 , 4.00 , 4.00 , 5.81 , 5.16 , 8.63 , -9.13 , 13.66]
#导入相关数据
bar=(
Bar(init_opts=opts.InitOpts(width='800px', height='600px'))#柱形图的宽度和高度
.add_xaxis(x_data)#把x_data实例化到画布中
.add_yaxis(
y_axis=y1,#实现y值
yaxis_index=1, #表示y轴的索引,用于拥有多个y轴的单图表中。
series_name='诊疗量(万人次)',
z=0,#因为折线图会被柱状图遮挡,所以把柱形图置底
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',
position='right',# 折线图y轴在右边显示
)
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'), #标题名称
legend_opts=opts.LegendOpts(pos_left='45%' ), #图例距离左边边距:40%
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), #显示提示框组件
toolbox_opts=opts.ToolboxOpts(is_show=True) #显示工具栏
)
)
line = (
Line() #创建Line类的对象
.add_xaxis(x_data) #添加x轴的数据
.add_yaxis(
series_name='同比增速(%)', #图例名:同比增速(%)
y_axis=y2, #y轴折线图数据
yaxis_index=2, #表示y轴的索引
z=2
)
)
#渲染图表
bar.render_notebook()
实例四:
基于pyecharts,用雷达图展示
import pyecharts.options as opts
from pyecharts.charts import Radar
data = [[33, 45, 3, 9,6, 4]]
x_schema = [
{"name": "化学药", "color": 'black', "font_size": 18},
{"name": "中成药", "color": 'black', "font_size": 18},
{"name": "生物制品", "color": 'black',"font_size": 18},
{"name": "中药饮片", "color": 'black', "font_size": 18},
{"name": "保健品", "color": 'black', "font_size": 18}
]
radar_x = Radar()
radar_x.add_schema(x_schema,shape="circle")
radar_x.add('药品', data, color='red').set_colors(['red'])
radar_x.set_global_opts(
title_opts=opts.TitleOpts(title="全国药店药品销售额占比", pos_right="center"),
legend_opts=opts.LegendOpts(legend_icon="roundRect", align="left", pos_left='7%',
pos_bottom='14%', orient='vertical')
)
radar_x.render_notebook()