基于 pyechart 展示四个图表并实现“并行多图”和“轮播多图”的方式排布

一、各表格数据 

表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

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

年龄

占比(%)

20岁以下

2.2

20-30岁

27.9

31-40岁

56.2

41-50岁

10.9

51岁以上

2.8

表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

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

药品类型

占比(%)

化学药

33

中成药

45

生物制品

3

医疗器械

9

中药饮片

6

保健品

4

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

1、代码如下:

from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
 
x_year = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
data1 = [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215]
data2 = [7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66]
 

bar = Bar()
bar.add_xaxis(x_year)
bar.add_yaxis("", data1, 
              # z值小的图形会被z值大的图形覆盖
              z=2,
              color='orange',
             )
bar.extend_axis(
        yaxis=opts.AxisOpts(
                        name='同比增速(%)',
                        # 坐标轴标签配置项
                        axislabel_opts=opts.LabelOpts(
                                                formatter="{value}%",
                                                font_size = 10
                                                    ), 
                        interval=3,
                        min_=-20,
                        max_=20,
                        )
                )
 
# 设置系列配置项
bar.set_series_opts(
        label_opts=opts.LabelOpts(
                            is_show=True,
                            font_size = 15
                                    )
                    )
 
# 设置全局配置项(“全局配置项”中的“图例”和“提示框”都是默认显示的)
bar.set_global_opts(
        # 图例
        legend_opts=opts.LegendOpts(is_show=False, pos_left='50%', pos_bottom='93%'), # pos_left\pos_bottom表示图例离容器左、下的距离
        # 工具箱
        toolbox_opts=opts.ToolboxOpts(is_show=False),
        # 缩放条
        datazoom_opts=opts.DataZoomOpts(is_show=False, range_start='100%', range_end='100%'),
        # # 标题(title为标题,subtitle为副标题)
        title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗",pos_left='30%', pos_bottom='93%'),
        # 轴的配置(这里是生效 x 轴)
        xaxis_opts=opts.AxisOpts(
                        # 坐标轴名称
                        name='年份(年)',
                        # 坐标轴名称与轴线之间的距离
                        name_gap=40,
                        # 坐标轴名字旋转,角度值
                        # name_rotate=60,
                                ),
    
        # 轴的配置(这里是生效 y 轴)
        yaxis_opts=opts.AxisOpts(
                        # 坐标轴名称
                         name='诊疗量(万人次)',
                        # 坐标轴标签配置项
                         axislabel_opts=opts.LabelOpts(
                                                formatter="{value}",
                                                font_size = 10
                                                     ),
                                 
                                ),
                     )
 

line = Line()
line.add_xaxis(x_year)
line.add_yaxis("", data2, yaxis_index=1,
               # z值小的图形会被z值大的图形覆盖
               z=3,
               color='purple',
               )
 
bar.overlap(line).render_notebook()

2、图表展示

 

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

1、代码如下:

# 1.【导入需要用到的图表类】
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Scatter,Pie
from pyecharts.faker import Faker
 
# 2.【利用图表类创建图表实例】
# 3.【往图表实例填充数据(数据格式必须符合传参要求)】
 
# 使用官网示例代码的关键是研究明白输入的数据格式
 
data = [['20岁以下', 2.2],['20-30岁', 27.9], ['31-40岁', 56.2],['41-50岁', 10.9], ['51岁以上', 2.8]]
 

# ratios = [2.2, 27.9, 56.2, 10.9, 2.8]   # 各年龄段用户比例
# data = ['20岁以下', '20-30岁', '31-40岁', '41-50岁', '51岁以上'] 

c = Pie()
 
c.add("", data ,
        radius=["15%", "35%"], # 挖掉的直径,整张饼的直径 (百分数指的是占画布中高和宽中小的那一项的比例)
        )
 
# c.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
 
# 4.【设置系列配置项和全局配置项(可选)——类似于matplotlib的图表辅助元素定制和样式美化】
 
    # 全局配置项
c.set_global_opts(
                # 标题(title为标题,subtitle为副标题)
                title_opts=opts.TitleOpts(title="中药材消费者画像数据",pos_left='38%', pos_bottom='85%'),
                # 图例
                legend_opts=opts.LegendOpts(is_show=False, pos_left='35%', pos_bottom='85%'),
                    )
    
    # 系列配置项
c.set_series_opts(
            # 标签配置项
            label_opts=opts.LabelOpts(
                                # 饼图、仪表盘、漏斗图 中 formatter: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
                                formatter="{b}: {d}",
                                # 标签文字的颜色。如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
#                                 color='auto',
                                # 标签文字的字体大小
                                font_size=20,
                                # 文字字体的风格,可选: 'normal','italic','oblique'
                                font_style='italic',
                                # 文字字体的粗细,可选:'normal','bold','bolder','lighter'
                                font_weight='lighter',
                                # 标签旋转。从 -90 度到 90 度。正值是逆时针
                                # rotate=-10,
                                # 刻度标签与轴线之间的距离
                                # margin=10,
                                # 文字块背景色。可以使用颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'。
                                # background_color='yellow',
                                      )
                     )
    

# 5. 【渲染图表】
c.render_notebook()

2、图表展示

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

1、代码如下:

import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
 
data = pd.DataFrame({
#准备数据
    "区域": ["2019年", "2020年", "2021年", "2022年", "2023年"],#x轴
    "总销量": [100, 100, 100, 100, 100],#y轴
    "跨国企业占比(%)": [20.3, 22.0, 23.5, 22.5, 22.3],
    "本土企业占比(%)": [79.7, 78.0, 76.5, 77.5, 77.7], 
})
 
bar = (
    
    Bar(init_opts=opts.InitOpts(width="800px", height="500px"))#指定画布大小
    .add_xaxis(data["区域"].tolist())
    .add_yaxis("总销量", data["总销量"].tolist(),
    ) 
   
)
stack_bar = (
    Bar(init_opts=opts.InitOpts(width="830px", height="500px"))
    .add_xaxis(data["区域"].tolist())
    .add_yaxis("跨国企业占比(%)", data["跨国企业占比(%)"].tolist(), stack="stack1", category_gap="50%",color='orange',)
    .add_yaxis("本土企业占比(%)", data["本土企业占比(%)"].tolist(), stack="stack1", category_gap="50%",color='yellow',)
   
    # 在系列设置中设置标签属性
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False)#隐藏数据
    )
        .set_global_opts(
             title_opts=opts.TitleOpts(
                 #设置标题
                 title="全国药店中药饮片供应商占比情况",pos_left='33%', pos_bottom='92%'),
                 #设置图例
                 legend_opts=opts.LegendOpts(is_show=False))

)

stack_bar.render_notebook()

2、图表展示

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

1、代码如下:

from pyecharts import options as opts
from pyecharts.charts import Radar#导入库
 
v = [[33, 45, 3, 9, 6, 4]]#数据
 
c = (
 
    Radar(init_opts=opts.InitOpts(width="600px", height="500px"))#指定画布大小
    .add_schema(
        schema=[
            opts.RadarIndicatorItem(name="化学药"),
            opts.RadarIndicatorItem(name="中成药"),
            opts.RadarIndicatorItem(name="生物制品"),
            opts.RadarIndicatorItem(name="医疗器械"),
            opts.RadarIndicatorItem(name="中药饮品"),
            opts.RadarIndicatorItem(name="保健品"),
        ],
        textstyle_opts=opts.TextStyleOpts(color="#fff"),
    )
    .add("药品类型", v,
        linestyle_opts=opts.LineStyleOpts(color="#CD0000"),)
   
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        legend_opts=opts.LegendOpts(is_show=False,selected_mode="single"),
        #设置标题
        title_opts=opts.TitleOpts(title="全国药店药品销售额占比",pos_left='33%', pos_bottom='90%'),
    )

)

c.render_notebook()

2、图表展示

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值