综合练习题

pyecharts绘图思路:

 1.【导入需要用到的图表类(Bar,Line,Scatter,Pie)】

 2.【准备数据(数据爬取-数据清洗-数据结构化): 数据格式要符合传参的需求】

3.【通过导入的图表类,创建图表实例】

4.【.往图表实例填充数据,即完成绘图】

5. 【设置“系列配置项”和“全局配置项”--> 可做可不做(类似于matplotlib的:图表辅助元素的定制和样式美化)】

6. 【展示图表(渲染图表)

【pyecharts的常用的图表分成两大类】:

1. 带x轴和y轴的直角坐标系图表(柱形图,折线图,散点图,箱型图)
     .add_xaxis()      .add_yaxis()

2. 不带x轴和y轴的基本图表(饼图,环图,词云图,桑基图,漏斗图, 雷达图)    

  .add()

附:Pyecharts常用网址

在anaconda prompt命令行工具下,通过pip清华镜像源安装pyecharts

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts 

echarts官网:https://www.echartsjs.com/index.html
pyecharts官网:https://pyecharts.org/#/zh-cn/intro
pyecharts众多图表示例代码:https://gallery.pyecharts.org/#/README
pyecharts github项目国内镜像: https://gitee.com/mirrors/pyecharts     

需求一: 请基于pyecharts,用柱形图和折线图在同一个坐标系展示表1数据,得到图1。

需求 请基于pyecharts,用环图展示表2数据,得到图2。

需求 请基于pyecharts,用堆积柱形图展示表3数据,得到图3。

需求 请基于pyecharts,用雷达图展示表4数据,得到图4。

需求 将上述图1到图4,利用“并行多图”的方式排布,得到图5。(参考示意图)

需求 将上述图1到图5,利用“轮播多图”的方式排布,得到图6。

 需求一

import pyecharts.options as opts   
from pyecharts.charts import Bar, Line
x_data = ['2014年','2015年','2016年','2017年','2018年','2019年','2020年','2021年']   #x轴数据
data_1 =[87430, 90912,96225,101885,107147,116390,105764,120215]                      #诊疗量(万人次)的数据
data_2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.31,13.66]                                 #同比增速(%)的数据
# 创建柱形图对象
bar = (
    Bar(init_opts=opts.InitOpts(width='1000px', height='500px'))                    #设置柱形图宽度与高度
    .add_xaxis(xaxis_data=x_data)                                                   #添加x轴的数据
    .add_yaxis(                                                    
        series_name='诊疗量(万人次)',                            #图例名:诊疗量(万人次)
        y_axis=data_1,                                             #y轴柱形图数据
        yaxis_index=1,                                             #表示y轴的索引,用于拥有多个y轴的单图表中。
        label_opts=opts.LabelOpts(is_show=False),                  #不显示柱形图数据
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='诊疗量(万人次)',                             
            type_='value',
            min_=0,max_=150000,                                    #y轴最小值为0,y轴最大值为150000
            position='left'                                        #位于y轴左侧
        )
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='同比增速(%)',                                 
            type_='value',
            min_=-10, max_=15,                                    #y轴最小值为-10,最大值为15                                                   
            position='right',                                     #位于y轴右侧
        )
    )
    .set_global_opts(                                             #设置全局配置项
        title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'),      #标题
        legend_opts=opts.LegendOpts(pos_left='40%' ),                              #图例距离左边边距:40%
        tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),     #显示提示框组件
        #toolbox_opts=opts.ToolboxOpts(is_show=True)      #显示工具栏
    )
    .set_series_opts(
        itemstyle_opts=opts.ItemStyleOpts(               #图元样式配置项
            opacity=0.5),                                #设置柱形图透明度:0.5
    )
)
# 创建折线图对象
line = (
    Line()                                       
    .add_xaxis(x_data)                                   #添加x轴的数据
    .add_yaxis(
        series_name='同比增速(%)',                     #图例名:同比增速(%)
        y_axis=data_2,                                   #y轴折线图数据
        yaxis_index=2,                                   #表示y轴的索引,用于拥有多个y轴的单图表中
    )
)
bar.overlap(line).render_notebook()              ##overlap传入的必须为直角坐标系类型图表 ,柱形图层叠折线图

图1如下: 

 需求二

from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Scatter,Pie
from pyecharts.faker import Faker
data = [["20岁以下",2.2],["20-30岁",27.9],["31-40岁",56.2],["41-50岁",10.9],["51岁以上",2.8]]
c = (
    Pie()
    .add("", data ,
        radius=["25%", "50%"], # 挖掉的直径,整张饼的直径 (百分数指的是占画布中高和宽中小的那一项的比例)    
        )
     .set_colors(["green", "blue", "pink", "orange", "yellow"])
     .set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据"))
     .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    
)
c.render_notebook()  #渲染到notebook上

 图2如下:

需求三

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
x_years =['2019年', '2020年','2021年', '2022年','2023年']    #导入数据
y1 = [20.3, 22.0, 23.5, 22.5, 22.3]                          
y2 = [79.7, 78.0, 76.5, 77.5, 77.7]                         
c = (       
    Bar()
    .add_xaxis(x_years)
    .add_yaxis("跨国企业占比(%)", y1, stack="stack1", color='orange',bar_width=80)      #纵坐标1 图例名称
    .add_yaxis("本土企业占比(%)", y2, stack="stack1" )      #纵坐标2    stack="stack":数据堆叠,必须两组同时设置才可生效
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True ,            #是否显示数据标签
                                               position="right",         #设置柱形图每一条的数据在右侧显示
                                               font_size=12,             #文字大小
                                               font_weight = "bold") )   #文字字体的粗细
    .set_global_opts(title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况"))    #设置全局配置项      
)
c.render_notebook()   # 在notebook中渲染图表

图3如下:

 需求四

from pyecharts import options as opts
from pyecharts.charts import Radar

data = [[33, 45, 3, 9, 6, 4]]   #导入数据
c_schema = [
    {"name": "化学药", "max": 0, "min": 45},
    {"name": "中成药", "max": 0, "min": 45},
    {"name": "生物制品", "max": 0, "min": 45},
    {"name": "医疗器械", "max": 0, "min": 45},
    {"name": "中药饮片", "max": 0, "min": 45},
    {"name": "保健品", "max": 0, "min": 45},
]
# 绘制雷达图实例
radar = (
    Radar(init_opts=opts.InitOpts())
    .set_colors(["blue"]) #数据点颜色,填充区域也会改变
    .add_schema(
        schema=c_schema,          # 雷达指示器配置项列表
        shape="circle",           #雷达图绘制类型
        center=["50%", "50%"],     #支持设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        radius="77%",              #半径
        angleaxis_opts=opts.AngleAxisOpts(        #极坐标系角度轴配置项
            min_=0,                #坐标轴刻度标签最小值
            max_=360,              #坐标轴刻度标签最大值
            interval=20,           #坐标轴分割间隔
            axistick_opts=opts.AxisTickOpts(is_show=False), # 轴刻度
            axislabel_opts=opts.LabelOpts(is_show=False),    #坐标轴线标签配置项
            axisline_opts=opts.AxisLineOpts(is_show=False),  # 坐标轴线风格配置项
            splitline_opts=opts.SplitLineOpts(is_show=False), #坐标轴在 grid 区域中的分隔区域
        ),
        radiusaxis_opts=opts.RadiusAxisOpts( # 极坐标系的径向轴
            min_=0, # 设置坐标轴刻度的最小值
            max_=45, # 设置坐标轴刻度的最大值
            interval=20, # 坐标轴间隔值
        ),
        polar_opts=opts.PolarOpts(),
        splitarea_opt=opts.SplitAreaOpts(is_show=False), # 分隔区域配置项
        splitline_opt=opts.SplitLineOpts(is_show=False), # 分割线配置项
    )
    .add(
        series_name="全国药店药品销售额占比", #设置标题
        data=data,
        areastyle_opts=opts.AreaStyleOpts(opacity=0.2), # 区域填充样式配置项,透明度
        linestyle_opts=opts.LineStyleOpts(width=2),    #线样式配置项,线宽
    )
    .set_global_opts(title_opts=opts.TitleOpts(title='全国药店药品销售额占比'))
)
radar.render_notebook() #渲染到notebook上

图4如下: 

# 导入所需要用到的库以及图表类
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Radar, Pie
from pyecharts.commons.utils import JsCode
from pyecharts.faker import Faker
  
x_data = ['2014年','2015年','2016年','2017年','2018年','2019年','2020年','2021年']   #x轴数据
data_1 =[87430, 90912,96225,101885,107147,116390,105764,120215]                      #诊疗量(万人次)的数据
data_2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.31,13.66]                                 #同比增速(%)的数据
# 创建柱形图对象
bar1 = (
    Bar(init_opts=opts.InitOpts(width='1000px', height='500px'))                    #设置柱形图宽度与高度
    .add_xaxis(xaxis_data=x_data)                                                   #添加x轴的数据
    .add_yaxis(                                                    
        series_name='诊疗量(万人次)',                            #图例名:诊疗量(万人次)
        y_axis=data_1,                                             #y轴柱形图数据
        yaxis_index=1,                                             #表示y轴的索引,用于拥有多个y轴的单图表中。
        label_opts=opts.LabelOpts(is_show=False),                  #不显示柱形图数据
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='诊疗量(万人次)',                             
            type_='value',
            min_=0,max_=150000,                                    #y轴最小值为0,y轴最大值为150000
            position='left'                                        #位于y轴左侧
        )
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='同比增速(%)',                                 
            type_='value',
            min_=-10, max_=15,                                    #y轴最小值为-10,最大值为15                                                   
            position='right',                                     #位于y轴右侧
        )
    )
    .set_global_opts(                                             #设置全局配置项
        title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'),      #标题
        legend_opts=opts.LegendOpts(pos_left='45%' ),                              #图例距离左边边距:45%
        tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),     #显示提示框组件
        #toolbox_opts=opts.ToolboxOpts(is_show=True)      #显示工具栏
    )
    .set_series_opts(
        itemstyle_opts=opts.ItemStyleOpts(               #图元样式配置项
            opacity=0.5),                                #设置柱形图透明度:0.5
    )
)
# 创建折线图对象
line = (
    Line()                                       
    .add_xaxis(xaxis_data=x_data)                                   #添加x轴的数据
    .add_yaxis(
        series_name='同比增速(%)',                     #图例名:同比增速(%)
        y_axis=data_2,                                   #y轴折线图数据
        yaxis_index=1,                                   #表示y轴的索引,用于拥有多个y轴的单图表中
    )
)

# 堆积柱形图
bar2 = (
    Bar()
    .add_xaxis(['2019年','2020年','2021年','2022年','2023年'])
    .add_yaxis("跨国企业占比", 
               [20.3,22.0,23.5,22.5,22.3], 
               stack="stack1",   # 数据堆叠
               xaxis_index=1,yaxis_index=3)
    .add_yaxis("本土企业占比", 
               [79.7,78.0,76.5,77.5,77.7], 
               stack="stack1",
               xaxis_index=1,yaxis_index=3)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="全国药店中药饮品供应商占比",pos_top="50%",pos_left="38%",   # 设置标题名称,控制标题的位置
        ),
        legend_opts=opts.LegendOpts(is_show=False),   # 设置不显示图例
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=9)) # 控制x轴字体大小
    )
)
 
# 饼图
pie = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(
            ['20岁以下', '20-30岁', '31-40岁', '41-50岁', '51岁以上'], 
            [2.2, 27.9, 56.2, 10.9, 2.8])],   # 传入数据
#         [("20岁以下",2.2),("20-30岁",27.9),("31-40岁",56.2),("41-50岁",10.9),("51岁以上",2.8)],   # 也可以用这种方法传入数据
        radius=[40,80],   
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        center=["20%","80%"], 
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标,默认设置成百分比
        # 设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        start_angle = 0,   # 起始角度,支持范围 [0,360]
        is_clockwise = False,   # 饼图的扇区是否是顺时针排布
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中药材消费者画像",pos_top="50%",pos_left="12%"),   # 设置标题以及标题的位置
        legend_opts=opts.LegendOpts(is_show=False),   # 设置不显示图例
    )
)
 
# 放在实例后面,不然会报错
barline=bar1.overlap(line)   # 融合图表
 
grid=(
    Grid()
    .add(barline, grid_opts=opts.GridOpts(pos_bottom="60%"),
         is_control_axis_index=True,)   # 第一个图表:折线-柱形融合图
    .add(bar2, grid_opts=opts.GridOpts(pos_top="57%",pos_bottom="5%",pos_left="41%",pos_right="37%"),
         is_control_axis_index=True,)   # 第三个图表:堆积柱形图
#     .add(radar, grid_opts=opts.GridOpts(pos_top="60%",pos_left="65%"))
    .add(pie, grid_opts=opts.GridOpts(pos_top="57%"), 
         is_control_axis_index=True,)   # 第二个图表:饼图
)
 
# 渲染图表到notebook
grid.render_notebook()

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值