绘制柱形图,折线图,饼图,堆积柱形图的组合图

Pyecharts是一个用于生成Echarts图表的类库,它提供了许多功能和灵活性,可以创建各种类型的图表。

在Pyecharts中,组合图表是通过Grid类实现的。Grid类表示并行排列的组合图表,可以左右布局或上下布局的方式显示多个图表。

以下是一个使用Pyecharts绘制组合图表的示例代码:

#导入所需的库
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Radar, Grid
# 插入柱形图数据
x_data = ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021']
bar = (
    Bar()
    # 配置x轴与y轴
    .add_xaxis(x_data)
    .add_yaxis(
        "诊疗量",
        [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215],
        yaxis_index=0,  # 设置y轴索引,为第一条y轴
        z=0,  # 将z轴的值调整为0,使得z值更大的折线图能覆盖在柱形图上
        color="orange",
        label_opts=opts.LabelOpts(is_show=False)
    )
    # 拓展并配置第二条y轴
    .extend_axis(
        yaxis=opts.AxisOpts(
            type_="value",
            name="同比增速(%)",
            name_location="center",
            name_gap=30,
            min_=-20,
            max_=20,
            axislabel_opts=opts.LabelOpts(font_size=14),
            # 设置刻度样式
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="black")
            ),
            splitline_opts=opts.SplitLineOpts(
                is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
            ),
        )
    )
    # 设置全局配置
    .set_global_opts(
        yaxis_opts=opts.AxisOpts(
            name="诊疗量(万人次)",
            name_location="center",
            name_gap=60,
            min_=0,
            interval=50000,
            axislabel_opts=opts.LabelOpts(font_size=14),
            offset=0,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="black")
            ),

        ),
        title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量", pos_left="35%", pos_top="2%"),
        legend_opts=opts.LegendOpts(is_show=False),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
    )
)
# 绘制折线图
line = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis(
        "同比增速(%)",
        [7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],
        symbol='triangle',  # 设置线条样式
        symbol_size=15,
        yaxis_index=1,  # 设置y轴索引,为第二条y轴
        color="Magenta",  # 设置线条颜色
        label_opts=opts.LabelOpts(is_show=False),
    )
)
# 绘制饼图
pie_demo = (
    Pie()
    .add("", [('20岁以下', 2.2), ('20-20岁', 27.9),
              ('31-40岁', 56.2), ('41-50岁', 10.9),
              ('51岁以上', 2.8)],
         center=["18%", "75%"],
         radius=[30, 56],  # 设置内圆与外圆半径
         label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
    # 配置标题
    .set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像", pos_left="10%", pos_top="54%"),
                     legend_opts=opts.LegendOpts(is_show=False))

)

# 绘制堆积柱形图
data1 = (20.3, 22.0, 23.5, 22.5, 22.3)
data2 = (79.7, 78.0, 76.5, 77.5, 77.7)
bar1 = (
    Bar()
    # 配置x轴与y轴
    .add_xaxis(['2019', '2020', '2021', '2022', '2023'])
    .add_yaxis("供应商A", data1, stack="stack1", xaxis_index=1, yaxis_index=2)
    .add_yaxis("供应商B", data2, stack="stack1", xaxis_index=1, yaxis_index=2)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 关闭图例
    .set_global_opts(
        yaxis_opts=opts.AxisOpts(
            min_=0,  # 刻度最小值
            max_=120,  # 刻度最大值
            interval=25  # 刻度间差值
        ),
        title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比", pos_left='40%', pos_top='54%'),  # 设置标题
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(max_=4)
    )
)

overlap = bar.overlap(line)  # 一定要放到最后,否则跑不出来
# 用grid将他们并在一张画布上,再用pos_bottom等调整各图在画布上的位置
grid = (
    Grid()
    .add(overlap, grid_opts=opts.GridOpts(pos_bottom="50%", pos_right="7%", pos_left="20%", pos_top="8%"),
         is_control_axis_index=True)
    .add(pie_demo, grid_opts=opts.GridOpts(pos_bottom="10%", pos_left="40%", pos_top="60%", pos_right="30%"))
    .add(bar1, grid_opts=opts.GridOpts(pos_bottom="20%", pos_right="20%", pos_left="50%", pos_top="20%"),
         is_control_axis_index=True)
)
# 在python里渲染
grid.render()

成果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值