使用Pyecharts绘制堆叠条形图(附完整代码)

数据可视化是数据分析的关键部分之一,它可以帮助我们更好地理解和阐释数据。在本篇博客中,我将介绍如何使用Python可视化库pyecharts绘制一个堆叠条形图,并讲解如何通过分享代码和数据来教会他人绘制可视化图表。

数据概览:

首先,让我们来看看我们要可视化的数据。在这里,我们将使用全国药店中药饮片供应商的占比情况。我们有五个年份的数据,包括跨国企业占比和本土企业占比。

全国药店中药饮片供应商占比情况

年份(年)

跨国企业占比(%

本土企业占比(%

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

可视化实现: 

接下来,我们需要使用Python编写代码来绘制双轴柱状图。在这里,我们将使用pyecharts库。

from pyecharts import options as opts  # 导入pyecharts的配置模块opts
from pyecharts.charts import Bar  # 导入pyecharts的柱状图模块Bar
  • 导入pyecharts的配置模块opts,用于设置图表的参数。
  • 导入pyecharts的柱状图模块Bar,用于创建柱状图对象。
# 定义横轴数据
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]
  • 定义横轴数据x_data,包含了五个年份。
  • 定义第一组纵轴数据y_data1,表示跨国企业的占比。
  • 定义第二组纵轴数据y_data2,表示本土企业的占比。
c = (
    Bar()  # 使用Bar类创建柱状图对象
    .add_xaxis(x_data)  # 添加横轴数据
    .add_yaxis("跨国企业占比", y_data1, stack="stack1")  # 添加第一组纵轴数据,并指定堆叠方式为"stack1"
    .add_yaxis("本土企业占比", y_data2, stack="stack1")  # 添加第二组纵轴数据,并指定堆叠方式为"stack1"
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 设置数据标签不显示
    .set_global_opts(
        title_opts=opts.TitleOpts(title="跨国企业与本土企业占比"),  # 设置图表标题
        xaxis_opts=opts.AxisOpts(name="年份"),  # 设置横轴名称
        yaxis_opts=opts.AxisOpts(name="占比(%)"),  # 设置纵轴名称
        legend_opts=opts.LegendOpts(pos_left="right"),  # 设置图例位置在右侧
    )
    .render("03.html")  # 将图表渲染为HTML文件,保存为"03.html"
)
  • 创建柱状图实例c,使用Bar()创建一个空的柱状图对象。
  • 使用.add_xaxis(x_data)方法添加横轴数据。
  • 使用.add_yaxis("跨国企业占比", y_data1, stack="stack1")方法添加第一组纵轴数据,并指定堆叠方式为"stack1"。
  • 使用.add_yaxis("本土企业占比", y_data2, stack="stack1")方法添加第二组纵轴数据,并指定堆叠方式为"stack1"。
  • 使用.set_series_opts(label_opts=opts.LabelOpts(is_show=False))方法设置数据标签不显示。
  • 使用.set_global_opts(...)方法设置图表的全局参数,包括标题、轴名称和图例位置等。
  • 使用.render("03.html")方法将图表渲染为HTML文件,保存为"03.html"。

该代码运行后会生成一个堆叠条形图,用于展示跨国企业和本土企业在不同年份的占比情况。图表的标题是“跨国企业与本土企业占比”,x 轴代表年份,y 轴代表占比。图例位置位于右侧。

以下是完整的代码实现:

from pyecharts import options as opts  # 导入 pyecharts 库的 options 模块
from pyecharts.charts import Bar  # 导入 pyecharts 库的 Bar 类

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]  # 定义本土企业占比数据

c = (
    Bar()  # 创建一个 Bar 类实例
    .add_xaxis(x_data)  # 添加 x 轴数据
    .add_yaxis("跨国企业占比", y_data1, stack="stack1")  # 添加跨国企业占比数据
    .add_yaxis("本土企业占比", y_data2, stack="stack1")  # 添加本土企业占比数据
    .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"),  # 设置图例位置为右侧
    )
    .render("03.html")  # 将图表渲染成 html 文件,保存为“03.html”
)

输出展示:

### 如何使用 Pyecharts 创建组合折线图和堆叠柱状图 Pyecharts 是一个用于生成 Echarts 图表的 Python 库,能够轻松创建交互式的可视化效果。为了实现包含折线图和层叠柱形图的组合图表,可以利用 `Bar` 和 `Line` 类,并通过叠加的方式构建图形。 下面是一个具体的例子来说明如何做到这一点: ```python from pyecharts.charts import Bar, Line from pyecharts import options as opts import random # 假设的数据准备 categories = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] bar_data_1 = [random.randint(30, 80) for _ in range(7)] bar_data_2 = [random.randint(60, 90) for _ in range(7)] line_data = [round(random.uniform(50, 100), 2) for _ in range(7)] # 初始化柱状图对象并设置基本参数 bar_chart = ( Bar() .add_xaxis(categories) .add_yaxis( series_name="Series A", y_axis=bar_data_1, stack="stack_group" ) .add_yaxis( series_name="Series B", y_axis=bar_data_2, stack="stack_group" ) ) # 添加折线图到现有图表上 combined_chart = ( bar_chart.overlap( Line().add_xaxis(categories).add_yaxis("Average Score", line_data)) .set_global_opts(title_opts=opts.TitleOpts(title="Combined Chart")) ) # 渲染图表至HTML文件查看结果 combined_chart.render('combination.html') ``` 上述代码片段展示了怎样在一个图表里同时呈现两个不同类型的系列——即堆叠条形图以及一条代表平均分数变化趋势的折线图[^1]。这里的关键在于使用 `.overlap()` 方法将另一个图表实例(这里是 `Line` 实例)添加到了已经存在的 `Bar` 对象之上;而所有的自定义选项都可以通过链式调用来完成配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值