数据可视化后起之秀----Pyecharts(2)

表1. 2014-2021年中国中医类医疗卫生机构诊疗量

年份(年)

诊疗量(万人次)

同比增速(%

2014

87430

7.40

2015

90912

4.00

2016

96225

5.83

2017

101885

5.81

2018

107147

5.16

2019

116390

8.63

2020

105764

-9.13

2021

120215

13.66

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

柱形折线组合图示例代码:

#导入库
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
from pyecharts import options as opts

# 准备数据
x_data = ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021']
v1 = [87430,90912,96225,101885,107147,116390,105764,120215]
v2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66]

#链式调用
bar = (
    Bar()
    .add_xaxis(x_data)           #调用add_xaxis()和add_yaxis()为柱形图添加x轴和y轴数据
    .add_yaxis("诊疗量",         #series_name:系列的名称,显示于提示框和图例中
               v1,               #y_axis:系列的数据
               z=0,              #在这里面加z=0,就可以让折线图在柱形图上面
               color="orange")   #设置颜色
    
    .extend_axis(
        yaxis=opts.AxisOpts      #坐标轴配置项
       (    name="同比增速(%)",
            min_= -20,           #前面一定要添加下划线,否则会报错
            max_= 20,
            axislabel_opts=opts.LabelOpts(formatter="{value}%"), #标签配置项
        
            axisline_opts=opts.AxisLineOpts                      #坐标轴轴脊配置项
        (
                linestyle_opts=opts.LineStyleOpts(color="black") #线条样式配置项
            ),
        )
     )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))   #显示柱形图标签
    .set_global_opts                                            #设置全局配置项要传入set_global_opts()方法
    (
        yaxis_opts=opts.AxisOpts(
            name="诊疗量(万人次)",
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="black")
            )),
        title_opts=opts.TitleOpts(title="柱形折线融合图"),     #标题组件的配置项
    )
    )

#折线图
line = Line().add_xaxis(x_data).add_yaxis("同比增速",     #series_name:系列的名称,显示于提示框和图例中
                                           v2,            #y_axis:系列的数据
                                           yaxis_index=1) #y轴的索引,用于拥有多个y轴的单图表

#渲染图表
bar.overlap(line)
bar.render_notebook()

效果图:

表2. 中药材消费者画像数据

年龄

占比(%

20岁以下

2.2

20-30岁

27.9

31-40岁

56.2

41-50岁

10.9

51岁以上

2.8

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

环图示例代码:

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

# 创建Pie实例
c = (
    Pie()
    .add(
        "",
        [("20岁以下",2.2),("20-30岁",27.9),("31-40岁",56.2),
         ("41-50岁",10.9),("51岁以上",2.8)],
        radius=[80,160],       #半径=[内半径,外半径]
        center=["27%","45%"],  #圆心=[横坐标,纵坐标]
        start_angle = 0,       #起始角度
        is_clockwise = False,  #逆时针排布
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中药材消费者画像",pos_top="3%",pos_left="18%"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="3%", pos_left="50%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    )
# 渲染并保存图表
c.render_notebook()

效果图:

表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

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

堆积柱状图示例代码:

from pyecharts import options as opts
from pyecharts.charts import Bar
 
# 创建柱形图实例,添加可选的全局配置项
(
    Bar()
    .add_xaxis(['2019年','2020年','2021年','2022年','2023年'])   
    .add_yaxis("跨国企业占比", [20.3,22.0,23.5,22.5,22.3], stack="stack1", bar_width=70,color='brown')   # stack="stack1"表示数据堆叠,
    .add_yaxis("本土企业占比", [79.7,78.0,76.5,77.5,77.7], stack="stack1", bar_width=70)                 #bar_width表示设置柱形的宽度
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="全国药店中药饮品供应商占比",pos_top="3%",pos_left="30%",   # 设置标题名称以及控制标题所在位置
#           title_textstyle_opts=opts.TextStyleOpts(font_size=12),            # 控制标题的字体大小,传参时记得下划线
        ),
        legend_opts=opts.LegendOpts(pos_top="3%",pos_left="60%"),  
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=17)) 
    )
    .render_notebook()   # 渲染图表
)

效果图:

表4. 全国药店药品销售额占比

药品类型

占比(%

化学药

33

中成药

45

生物制品

3

医疗器械

9

中药饮片

6

保健品

4

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

雷达图示例代码:

from pyecharts import options as opts
from pyecharts.charts import Radar   
 
# 准备数据以及标签名称
data = [{"value": [33, 45, 3, 9, 6, 4], "name": "销售额占比"}]
c_schema = [
    {"name": "化学药", "max": 45, "min": 0},
    {"name": "中成药", "max": 45, "min": 0},
    {"name": "生物制品", "max": 45, "min": 0},   
    {"name": "医疗器械", "max": 45, "min": 0},
    {"name": "中药饮品", "max": 45, "min": 0},
    {"name": "保健品", "max": 45, "min": 0},
]
 
# 创建雷达图实例,添加可选的全局配置项
(
    Radar()
    .set_colors(["grey"])   
    .add_schema(
        schema=c_schema,
        shape="circle",          # 雷达图绘制类型有'polygon'和'circle'两种参数可选
        center=["50%", "50%"],   # 圆心坐标,一般设置成百分比,第一项是相对于容器宽度,第二项是相对于容器高度
        radius="80%",            # 半径
        start_angle=0,
        textstyle_opts=opts.TextStyleOpts(color="black"),   
        angleaxis_opts=opts.AngleAxisOpts(
            min_=0,
            max_=360,
            is_clockwise=False,
            interval=5,          # 坐标轴间隔
            axistick_opts=opts.AxisTickOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
        radiusaxis_opts=opts.RadiusAxisOpts(
            min_=0,
            max_=45,
            interval=20,         # 坐标轴间隔
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)   # 设置透明度
            ),
        ),
        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.7),                     # 设置区域填充的透明度
        linestyle_opts=opts.LineStyleOpts(width=1),                         # 线样式配置项,设置线的宽度
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="全国药店药品销售额占比",pos_top="3%", pos_left="40%",),
    )
    .render_notebook()   # 渲染图表
)

效果图:

需求五: 将上述图1到图4,利用“并行多图”的方式排布,得到图5。

并行多图示例代码:

from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Pie, Radar   
 
# 柱形折线组合图
x_year = ["{}年".format(i) for i in range(2014, 2022)]   
# 设置x轴的年份数据,后面跟的单位为“年”
# 柱形图实例
bar1 = (
    Bar(init_opts=opts.InitOpts(width="1000px", height="500px"))
    # 设置柱形图宽度width为1000px、高度heigh为500px
    .add_xaxis(x_year)   # 添加柱形图x轴的数据
    .add_yaxis("诊疗量(万人次)",   # 添加图例,名为"诊疗量(万人次)"
              [87430,90912,96225,101885,107147,116390,105764,120215],   # y轴数据
              yaxis_index=1,   # y轴的索引,用于绘制多个y轴的图表中
              color="orange",   # 设置柱形图填充颜色为橙色
              xaxis_index=0,
              z=0
             )
     .extend_axis(
         yaxis=opts.AxisOpts(name="诊疗量(万人次)",    # y轴名称
                        type_="value",
                        min_=0, max_=140000,    # 设置y轴最小值min为0,最大值max为15000
                        position="left",   # 显示在y轴左侧
                        axisline_opts=opts.AxisLineOpts(
                            linestyle_opts=opts.LineStyleOpts(color="black")),   # 设置y轴、y轴名称以及y轴数据的颜色
                        )
                )
    .extend_axis(
        yaxis=opts.AxisOpts(name="同比增长速(%)",   # y轴名称
                            type_="value",
                            min_=-20, max_=20,   # 设置y轴最小值min为-20,最大值max为20 
                            position="right",   # 显示在y轴右侧
                            axisline_opts=opts.AxisLineOpts(
                                linestyle_opts=opts.LineStyleOpts(color="black")),   # 设置y轴、y轴名称以及y轴数据的颜色
                           )
                )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",pos_top="1%", pos_left="10%"),   
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),   # 设置显示提示框
        legend_opts=opts.LegendOpts(pos_top="1%",pos_left="53%"),   # 图例距离左边边距为53%,距离顶部边距为1%
    )
    .set_series_opts(
        itemstyle_opts=opts.ItemStyleOpts(
        opacity=0.5)   # 透明度为0.5
    )
)
 
# 折线图实例
line = (
    Line()
    .add_xaxis(x_year)  
    .add_yaxis("同比增长速(%)",   
               [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66],    
               yaxis_index=2,   # y轴的索引,用于绘制多个y轴的图表中
               z=3,             # 折线图展示在柱形图上方
               xaxis_index=0,
               )   
)
 
# 堆积柱形图
bar2 = (
    Bar()
    .add_xaxis(['2019年','2020年','2021年','2022年','2023年'])
    .add_yaxis("跨国企业占比", 
               [20.3,22.0,23.5,22.5,22.3], 
               stack="stack1",color='brown',   
               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(
        "",
       [("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,   
        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()

效果图:

over

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值