用pyecharts绘制一个柱形图并层叠折线图的融合图,饼图,柱形图

小伙伴可以看代码里的注释,里面有解释


先导库和准备数据

import pyecharts.options as opts
from pyecharts.charts import Line, Bar, Pie, Radar, Grid


# 准备数据
bar1_and_line_year_x = ["{}年".format(i) for i in range(2014, 2022)]
line_data_speed_y = [7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66]  # 同比增速
bar1_data_num_y = [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215]  # 诊疗量
bar_x = ['{}年'.format(ii) for ii in range(2019, 2024)]
bar2_y1 = [20.3, 22.0, 23.5, 22.5, 22.3]
bar2_y2 = [79.7, 78.0, 76.5, 77.5, 77.7]
radar_data = [[33, 45, 3, 9, 6, 4]]

然后绘制融合图

# 柱形图
bar1 = (
    Bar()
        .add_xaxis(xaxis_data=bar1_and_line_year_x)     # xaxis_data:x轴数据

        .add_yaxis(series_name='诊疗量', y_axis=bar1_data_num_y, xaxis_index=0,yaxis_index=0, z=0, bar_width='50') # series_name:表示当鼠标放在柱形图的柱子上时,出现的标识
                                                                                                                  # x/yaxis_index:表示x/y轴的下标,当同一张图有多个坐标轴时有用,避免数据发生混乱
                                                                                                                  # bar_width:表示柱子的宽度

        .extend_axis(yaxis=opts.AxisOpts(       # extend_axis:表示添加一条坐标轴,这里添加了一条y轴,opts.AxisOpts:表示对坐标轴的样式进行设计
        name="同比增速(%)",     # name:表示y轴标签
        type_="value",          # 坐标轴的类型,   # 'value': 数值轴,适用于连续数据。
                                                # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
                                                # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
                                                # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
                                                # 'log' 对数轴。适用于对数数据。
        min_=-20,  # 刻度标签的最小值
        max_=20,  # 刻度标签的最大值
        interval=10,  # 步长
    ))
        .set_global_opts(
        yaxis_opts=opts.AxisOpts(
            name="诊疗量(万人次)",
            min_=0,  # 刻度标签的最小值
            max_=150000,  # 刻度标签的最大值
            interval=50000,  # 步长
        ),
        title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",pos_left='center'),  # opts.TitleOpts:表示图表标题配置
                                                                                                   # title:标题名称
                                                                                                   # pos_left:表示标题相对于左边框的距离,其值可以是字符串,数值,百分比(%)
        legend_opts=opts.LegendOpts(is_show=False)  # opts.LegendOpts:表示图例配置,
                                                    # 这里is_show=False表示不显示图例
    )

)


# 折线图
line = (
    Line()
        .add_xaxis(xaxis_data=bar1_and_line_year_x)
        .add_yaxis(series_name="同比增速", y_axis=line_data_speed_y, xaxis_index=0,yaxis_index=1, )
)
bar1.overlap(line)  # overlap:表示层叠多图,这里表示在柱形图bar1上再绘制一个折线图

再到饼图

pie = (
    Pie()
        # 添加数据
        .add("", [('20岁以下', 2.2), ('20-30岁', 27.9), ('31-40岁', 56.2), ('41-50岁', 10.9), ('51岁以上', 2.8)],
             center=["20%", "80%"],  # 饼图的中心(圆心)坐标,默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
             radius=[50, 80])  # 饼图的半径,数组的第一项是内半径(中间缺口的半径),第二项是外半径(整个饼图的半径)
        # 设置标题
        .set_global_opts(title_opts=opts.TitleOpts(title='中药材消费者画像数据', pos_top="50%",pos_left='150'),
                         legend_opts=opts.LegendOpts(is_show=False))
)

再来柱形图

bar2 = (
    Bar()
        .add_xaxis(bar_x)
        .add_yaxis("跨国企业占比(%)", bar2_y1, stack="stack1", category_gap="50%",xaxis_index=1,yaxis_index=2)
        .add_yaxis("本土企业占比(%)", bar2_y2, stack="stack1", category_gap="50%",xaxis_index=1,yaxis_index=2)
        .set_global_opts(legend_opts=opts.LegendOpts(is_show=False),
                         title_opts=opts.TitleOpts(
                             title='全国药店中药饮片供应商占比', pos_top="50%", pos_left="470",)
                         )
        .set_series_opts(
        label_opts=opts.LabelOpts(
        )
    )
)

最后使用并行多图grid添加多个图表

grid = (
    Grid(init_opts=opts.InitOpts(width='1200px', height='650px'))   # Grid:表示并行多图,可以在一个容器(可以理解为一张白纸)中绘制多个图表
        .add(bar1, grid_opts=opts.GridOpts(is_show=True,pos_bottom=380, pos_top=50, pos_left="10%", pos_right="10%",),
             is_control_axis_index=True)        # add:表示添加一个绘图区域,is_control_axis_index:表示坐标轴的下标由自己控制

        .add(bar2, grid_opts=opts.GridOpts(is_show=True,pos_bottom=40, pos_top=400, pos_left="40%", pos_right="40%"),
             is_control_axis_index=True)

        .add(pie, grid_opts=opts.GridOpts(pos_bottom=40, pos_top=400, pos_left="10%", pos_right="70%"))

)
grid.render()    # 渲染图表,可以理解为将图表展示屏幕,如果用的anaconda,就改为:
# 
grid.render_notebook()

运行后效果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Life City

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值