在Pyecharts中使用Grid绘制4图合一的组合图表(附完整代码)

在数据可视化领域中,组合图表是一种非常常见的呈现方式。它可以将不同类型的图表结合起来,让人们更加直观地了解数据之间的关系。在 Python 的数据可视化库 pyecharts 中,Grid 是一种用于绘制组合图表的容器,可以让我们轻松地将多个图表进行排列组合。在本篇博客中,我将教会大家如何使用 Grid 在 pyecharts 中绘制组合图表。

首先,我们需要安装 pyecharts 库和其依赖项。可以通过在命令行中输入以下命令来完成:

pip install pyecharts

接下来,我们将使用一个包含四个图表的示例代码作为教学实例。该示例代码由两个单独的图表和两个组合图表组成,每个图表都有不同的样式和布局。

4份图的详细解析及代码见我博客的前几篇文章

图表01

http://t.csdnimg.cn/h9cug

图表02

http://t.csdnimg.cn/duBOt

图表03 

http://t.csdnimg.cn/Pvagn

图表04

http://t.csdnimg.cn/UUDrH

组合图表代码如下 :

# 引入必要的库
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Pie, Line, Radar

# 图表01:创建柱状图和折线图组合的Grid
# 定义x轴和y轴数据
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
bar = (
    Bar()  # 创建柱状图
    .add_xaxis(xaxis_data=x_data)  # 添加x轴数据
    .add_yaxis(
        series_name="诊疗量(万人次)",
        y_axis=[87.43, 90.91, 96.22, 101.89, 107.15, 116.39, 105.76, 120.22],  # 添加y轴数据
        label_opts=opts.LabelOpts(is_show=True),
    )
    .extend_axis(
        yaxis=opts.AxisOpts(  # 添加另一个y轴
            name="同比增速(%)",
            type_="value",
            min_=-75,
            max_=20,
            interval=5,
            axislabel_opts=opts.LabelOpts(formatter="{value} %"),
        )
    )
    .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="诊疗量(万人次)",
            type_="value",
            min_=50,
            max_=150,
            interval=10,
            axislabel_opts=opts.LabelOpts(formatter="{value} 万人次"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        legend_opts=opts.LegendOpts(orient="horizontal", pos_top="top", pos_right=0)  # 设置图例的位置和样式
    )
)

line = (
    Line()  # 创建折线图
    .add_xaxis(xaxis_data=x_data)  # 添加x轴数据
    .add_yaxis(
        series_name="同比增速(%)",
        yaxis_index=1,
        y_axis=[7.4, 4.0, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],  # 添加y轴数据
        label_opts=opts.LabelOpts(is_show=True),
    )
)
bar.set_global_opts(title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"))  # 设置图表的标题
bar.overlap(line)  # 将折线图与柱状图重叠在一起

# 图表02:创建环形图
# 定义饼图的数据
age_data = [("20岁以下", 2.2), ("20-30岁", 27.9), ("31-40岁", 56.2), ("41-50岁", 10.9), ("51岁以上", 2.8)]
pie = (
    Pie()  # 创建饼图
    .add(
        "",
        age_data,
        radius=["40%", "55%"],  # 设置内外半径
        label_opts=opts.LabelOpts(
            position="outside",
            formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",  # 标签的样式
            background_color="#eee",
            border_color="#aaa",
            border_width=1,
            border_radius=4,
            rich={
                "a": {"color": "#999", "lineHeight": 22, "align": "center"},
                "abg": {
                    "backgroundColor": "#e3e3e3",
                    "width": "100%",
                    "align": "right",
                    "height": 22,
                    "borderRadius": [4, 4, 0, 0],
                },
                "hr": {
                    "borderColor": "#aaa",
                    "width": "100%",
                    "borderWidth": 0.5,
                    "height": 0,
                },
                "b": {"fontSize": 16, "lineHeight": 33},
                "per": {
                    "color": "#eee",
                    "backgroundColor": "#334455",
                    "padding": [2, 4],
                    "borderRadius": 2,
                },
            },
        ),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据"))  # 设置图表标题
)

# 图表03:创建堆叠柱状图
# 定义x轴和y轴数据
x_data = ["2019", "2020", "2021", "2022", "2023"]
y_data1 = [20.3, 22.0, 23.5, 22.5, 22.3]
y_data2 = [79.7, 78.0, 76.5, 77.5, 77.7]
bar_stack = (
    Bar()  # 创建柱状图
    .add_xaxis(x_data)  # 添加x轴数据
    .add_yaxis("跨国企业占比", y_data1, stack="stack1")  # 添加第一组y轴数据,并设置堆叠方式
    .add_yaxis("本土企业占比", y_data2, stack="stack1")  # 添加第二组y轴数据,并设置堆叠方式
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 设置系列的标签样式
    .set_global_opts(
        title_opts=opts.TitleOpts(title="跨国企业与本土企业占比"),  # 设置图表标题
        xaxis_opts=opts.AxisOpts(name="年份"),  # 设置x轴的名称
        yaxis_opts=opts.AxisOpts(name="占比(%)"),  # 设置y轴的名称
        legend_opts=opts.LegendOpts(pos_left="right"),  # 设置图例的位置和样式
    )
)

# 图表04:创建雷达图
# 定义雷达图的数据
data = [{"value": [33, 45, 3, 9, 6, 4], "name": "药品类型"}]
radar = (
    Radar()  # 创建雷达图
    .add_schema(  # 添加雷达图的基本配置
        schema=[
            opts.RadarIndicatorItem(name="化学药", max_=50, min_=0),
            opts.RadarIndicatorItem(name="中成药", max_=50, min_=0),
            opts.RadarIndicatorItem(name="生物制品", max_=50, min_=0),
            opts.RadarIndicatorItem(name="保健品", max_=50, min_=0),
            opts.RadarIndicatorItem(name="中药饮片", max_=50, min_=0),
            opts.RadarIndicatorItem(name="其他", max_=50, min_=0),
        ],
        shape="circle",
        center=["50%", "50%"],
        radius="80%",
        angleaxis_opts=opts.AngleAxisOpts(
            max_=360,
            is_clockwise=False,
            interval=5,
            axistick_opts=opts.AxisTickOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
        radiusaxis_opts=opts.RadiusAxisOpts(
            min_=0,
            max_=50,
            interval=10,
            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.1),
        linestyle_opts=opts.LineStyleOpts(width=1),
    )
    .set_colors(["#4587E7"])
    .set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据"))  # 设置图表标题
)

# 创建水平排列的 Grid,包含图表02、图表03和图表04
grid_h = (
    Grid()
    .add(
        chart=bar,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="55%", pos_top="10%", pos_bottom="60%"),
    )
    .add(
        chart=pie,
        grid_opts=opts.GridOpts(pos_left="60%", pos_right="5%", pos_top="10%", pos_bottom="60%"),
    )
    .add(
        chart=bar_stack,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="55%", pos_top="65%", pos_bottom="5%"),
    )
    .add(
        chart=radar,
        grid_opts=opts.GridOpts(pos_left="60%", pos_right="5%", pos_top="65%", pos_bottom="5%"),
    )
)

# 创建垂直排列的 Grid,包含图表01和组合图表05
grid_v = (
    Grid()
    .add(
        chart=grid_h,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="5%", pos_bottom="5%"),
    )
    .add(
        chart=bar,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="65%", pos_bottom="5%"),
    )
    .render("grid.html")
)
  1. 图表01:创建柱状图和折线图组合的 Grid

    • 定义 x 轴和 y 轴数据;
    • 创建柱状图并设置全局配置,包括提示框样式、坐标轴样式等;
    • 创建折线图,并设置全局配置;
    • 将柱状图和折线图重叠在一起。
  2. 图表02:创建环形图

    • 定义饼图的数据,包括标签、半径等信息;
    • 创建环形图,并设置全局配置。
  3. 图表03:创建堆叠柱状图

    • 定义 x 轴和两组 y 轴数据;
    • 创建堆叠柱状图,并设置系列样式、全局配置等。
  4. 图表04:创建雷达图

    • 定义雷达图的数据和基本配置;
    • 创建雷达图,并设置样式、全局配置等。
  5. 创建水平排列的 Grid,包含图表02、图表03和图表04

    • 将图表02、图表03、图表04 水平排列在一起,并设置其位置和大小。
  6. 创建垂直排列的 Grid,包含图表01 和组合图表05

    • 将图表01 和组合图表05 垂直排列在一起,并设置其位置和大小。
  7. 最后调用 render 方法输出为 HTML 文件。

这段代码演示了如何使用 pyecharts 创建多种类型的图表,并通过 Grid 进行自定义布局和组合展示。

输出结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值