Pyecharts

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

代码如下: 

#导入模块
%matplotlib notebook
import pyecharts
import pyecharts.options as opts
import numpy as np
 
#导入需要用到的图表类
from pyecharts.charts import Bar, Line
 

#设置x轴的数据
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
 
#绘制柱形图
bar = (
    Bar()
#设置系列配置项
    .add_xaxis(xaxis_data=x_data)#设置x轴的数据 
    .add_yaxis(
        series_name="",
        #设置y轴的数据
        y_axis=["87430","90912","96225","101885","107147","116390","105764","120215"],
        label_opts=opts.LabelOpts(is_show=False),
        #设置柱形图的柱形颜色和透明度
        itemstyle_opts=opts.ItemStyleOpts(color="orange",opacity=0.5)
    )
    #增加了以温度为刻度的纵轴标签(延伸多一条纵轴标签)
    .extend_axis(
        #设置y轴
        yaxis=opts.AxisOpts(
            name="同比增速(%)",      #y轴标签
            name_location="center", #位置
            name_gap=60,            #与y轴的距离
            type_="value",          #设置y轴的类型(value数值,category类目,time时间,log对数)
            min_=-20,               #y轴数值最小值
            max_=20,                #y轴数值最大值
            interval=10,            #y轴数值的显示间隔
            axislabel_opts=opts.LabelOpts(formatter="{value} "), #设置y轴数值后的标记单位注释
            name_textstyle_opts=opts.TextStyleOpts(font_size=20) #y轴标签(字体)的大小
        )
    )
#设置全局配置项
    .set_global_opts(
        #提示框组件的配置项
        tooltip_opts=opts.TooltipOpts(
            is_show=True, trigger="axis", axis_pointer_type="cross"
        ),#是否显示提示框组件、提示框触发的条件、指示器类型
        #x轴的配置项
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        #y轴的配置项
        yaxis_opts=opts.AxisOpts(
            name="诊疗量(万人次)",  #y轴标签
            name_location="center",  #位置
            name_gap=60,            #与y轴的距离
            type_="value",          #设置y轴的类型(value数值,category类目,time时间,log对数)
            min_=0,                 #y轴数值最小值
            max_=150000,            #y轴数值最大值
            interval=50000,         #y轴数值的显示间隔
            axislabel_opts=opts.LabelOpts(formatter="{value} ", position="left"), #设置y轴数值后的标记单位注释、位置
            axistick_opts=opts.AxisTickOpts(is_show=True),      #坐标轴刻度配置项
            splitline_opts=opts.SplitLineOpts(is_show=True),     #分割线配置项
            name_textstyle_opts=opts.TextStyleOpts(font_size=20) #y轴标签(字体)的大小
        ),
      title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"), #图表标题   
    
      legend_opts=opts.LegendOpts(align='right')   #图例位置
    
    )
)
 
 
#绘制折线图
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)   #设置x轴数据
    .add_yaxis(
        series_name="",
        yaxis_index=1,              #y轴的索引,用于多个y轴的单图表中
        y_axis=["7.40","4.00","5.83","5.81","5.16","8.63","-9.13","13.66"],  设置y轴数据
        label_opts=opts.LabelOpts(is_show=False),
        symbol="triangle",         #标记符号
        symbol_size=20,            #标记符号大小
        itemstyle_opts=opts.ItemStyleOpts(
            border_width=3,  color="purple"
        )                          #标记符号边框大小、颜色
    )
)
 
#渲染图表(2种方式)
#一.直接渲染到notebook
bar.overlap(line).render_notebook()
#二.渲染到本地html文件
#bar.overlap(line).render("mixed_bar_and_line.html")

    运行程序,效果如图: 

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

代码如下: 

#导入模块
from pyecharts import options as opts
from pyecharts.charts import Pie
#准备数据
data = [['20岁以下',2.2],['20-30岁',27.9],['31-40岁',56.2],['41-50岁',10.9],['51岁以上',2.8]]
#绘制环图
pie = (
    Pie()
    .add("",data,radius=["40%", "75%"], )  #圆环的半径
    .set_colors(["blue","orange","green","red","purple"])  #环的各个部分的颜色
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中药材消费者画像数据"))  #标题
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))  #标签
)

#渲染图表
pie.render_notebook()

    运行程序,效果如图:  

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

代码如下: 

#导入模块
from pyecharts import options as opts
from pyecharts.charts import Bar
#绘制堆积图
bar1 = (
    Bar()
    .add_xaxis(['2019年','2020年','2021年','2022年','2023年'] )  #设置x轴
    .add_yaxis("跨国企业占比(%)", [20.3, 22.0, 23.5, 22.5, 22.3],  #设置y轴
               stack="stack1",itemstyle_opts=opts.ItemStyleOpts(color="blue"))
    .add_yaxis("本土企业占比(%)", [79.7, 78.0, 76.5, 77.5, 77.7], 
               stack="stack1",itemstyle_opts=opts.ItemStyleOpts(color="orange"))
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),  #旋转角度
        title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况"),
    )
    
)
#渲染图表
bar1.render_notebook()

    运行程序,效果如图:  

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

代码如下: 

#导入模块
from pyecharts import options as opts
from pyecharts.charts import Radar
#准备数据
v1 = [[33, 45, 3, 9, 6, 4]]
#绘制雷达图
polar = (
    Radar()
#雷达指示器配置项列表
    .add_schema(
        schema=[
            opts.RadarIndicatorItem(name="化学药", max_=50),
            opts.RadarIndicatorItem(name="中成药", max_=50),
            opts.RadarIndicatorItem(name="生物制品", max_=50),
            opts.RadarIndicatorItem(name= "医疗器械", max_=50),
            opts.RadarIndicatorItem(name="中药饮片", max_=50),
            opts.RadarIndicatorItem(name="保健品", max_=50),
        ]
    )
    .add("药品类型占比", v1)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #标签
    .set_global_opts(
        legend_opts=opts.LegendOpts(selected_mode="single"), #图例选择模式
        title_opts=opts.TitleOpts(title="全国药店药品销售额占比"), #标题
    )
    
)
#渲染图表
polar.render_notebook()

    运行程序,效果如图:  

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

Grid类:并行显示多个图表时,第一个图需为有x轴或者y轴的图,即不能为Pie,其他顺序任意

代码如下: 

#导入模块
%matplotlib notebook
import pyecharts
import pyecharts.options as opts
import numpy as np
 
#导入需要用到的图表类
from pyecharts.charts import Bar, Line, Pie, Grid
 
#图一:柱&折线图(解析如上)
#设置x轴的数据
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
 
#绘制柱形图
bar = (
    Bar()
#设置系列配置项
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="",
        y_axis=["87430","90912","96225","101885","107147","116390","105764","120215"],
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color="orange",opacity=0.5),
        z = 0
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name="同比增速(%)",
            name_location="center",
            name_gap=60,
            type_="value",
            min_=-20,
            max_=20,
            interval=10,
            axislabel_opts=opts.LabelOpts(formatter="{value} "),
            name_textstyle_opts=opts.TextStyleOpts(font_size=20)
        )
    )
#设置全局配置项
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(
            is_show=True, trigger="axis", axis_pointer_type="cross"
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="诊疗量(万人次)",
            name_location="center",
            name_gap=60,
            type_="value",
            min_=0,
            max_=150000,
            interval=50000,
            axislabel_opts=opts.LabelOpts(formatter="{value} ", position="left"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
            name_textstyle_opts=opts.TextStyleOpts(font_size=20)
        ),
      title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"),    
    
      legend_opts=opts.LegendOpts(align='right')  
    
    )
)
 
#绘制折线图
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="",
        yaxis_index=1,
        y_axis=["7.40","4.00","5.83","5.81","5.16","8.63","-9.13","13.66"],
        label_opts=opts.LabelOpts(is_show=False),
        symbol="triangle",
        symbol_size=20,
        itemstyle_opts=opts.ItemStyleOpts(
            border_width=3,  color="purple"
        )
    )
)
 
#图三:
#堆积图(解析如上)
#xaxis_index=1,yaxis_index=2 
#在并行多图里,有多个x轴或y轴的数据,此处便是帮它正确定位,不然数据一般会默认在第一个坐标轴里

bar1 = (
    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=2,itemstyle_opts=opts.ItemStyleOpts(color="blue"))
    .add_yaxis("本土企业占比(%)", [79.7, 78.0, 76.5, 77.5, 77.7], 
               stack="stack1",xaxis_index=1,                                                            
               yaxis_index=2,itemstyle_opts=opts.ItemStyleOpts(color="orange"))
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
        title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况",pos_top="50%", pos_left="35%"),    #标题在图布中的位置
        legend_opts=opts.LegendOpts(is_show=False)
    )
    
)

#图二:
#环图(解析如上)
data = [['20岁以下',2.2],['20-30岁',27.9],['31-40岁',56.2],['41-50岁',10.9],['51岁以上',2.8]]

pie = (
    Pie()
    .add("",data,radius=["30%", "15%"] ,center=[150,380]) #圆环中心的位置
    .set_colors(["blue","orange","green","red","purple"])
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中药材消费者画像数据",pos_top="49%", pos_left="5%"),   #标题的位置
        legend_opts=opts.LegendOpts(is_show=False)
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))
)

#在柱形图的基础上叠加折线图
bar.overlap(line)

#Gird是一个布局多个图表的容器
#pos_bottom,pos_top,pos_left, pos_right:grid组件离容器下、上、左、右的位置
#is_control_axis_index:表示是否由自己控制坐标轴索引

grid = Grid(init_opts=opts.InitOpts())
grid.add(bar, opts.GridOpts(pos_bottom="60%",pos_top="1%",pos_left="10%", pos_right="20%"), is_control_axis_index=True)
grid.add(bar1, opts.GridOpts(pos_bottom="10%",pos_top="60%",pos_left="40%", pos_right="40%"), is_control_axis_index=True)
grid.add(pie, grid_opts=opts.GridOpts(pos_bottom="1%",pos_top="1%",pos_left="40%", pos_right="65%"), is_control_axis_index=True)

#渲染图表
grid.render_notebook()

    运行程序,效果如图:  

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值