每日五个pyecharts可视化图表-bars(1)

在数据可视化中,柱状图是一种常用且直观的图表类型。本文将介绍五个使用pyecharts库创建的柱状图示例,每个示例都有详细的代码解释和实现原理。
pyecahts图表源码

图表一:带百分比标签的堆叠柱状图

python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

# 准备数据,包含值和百分比
list2 = [
    {"value": 12, "percent": 12 / (12 + 3)},
    {"value": 23, "percent": 23 / (23 + 21)},
    {"value": 33, "percent": 33 / (33 + 5)},
    {"value": 3, "percent": 3 / (3 + 52)},
    {"value": 33, "percent": 33 / (33 + 43)},
]

list3 = [
    {"value": 3, "percent": 3 / (12 + 3)},
    {"value": 21, "percent": 21 / (23 + 21)},
    {"value": 5, "percent": 5 / (33 + 5)},
    {"value": 52, "percent": 52 / (3 + 52)},
    {"value": 43, "percent": 43 / (33 + 43)},
]

# 创建图表对象并设置主题
c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    # 添加X轴数据
    .add_xaxis([1, 2, 3, 4, 5])
    # 添加Y轴数据,设置堆叠和分类间距
    .add_yaxis("product1", list2, stack="stack1", category_gap="50%")
    .add_yaxis("product2", list3, stack="stack1", category_gap="50%")
    # 设置系列配置项,特别是标签格式
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data.percent * 100).toFixed() + '%';}"
            ),
        )
    )
)
# 在notebook中显示图表
c.render_notebook()

首先,我们导入了必要的模块,包括pyecharts的选项、柱状图类、JS代码工具和主题设置。然后,我们准备了两组数据,每组数据都包含具体值和对应的百分比。

通过,我们创建了一个Bar对象并设置了主题为LIGHT。接着,我们添加了X轴数据和两组Y轴数据,并将它们设置为堆叠显示,分类间距为50%。

因为需要在图表上显示百分比,我们使用了JsCode工具来自定义标签格式化函数,将数据中的percent字段乘以100并取整,最后添加百分号。标签位置设置为右侧,以便更好地展示。

图表二:旋转X轴标签的柱状图

python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar

# 创建图表对象
c = (
    Bar()
    # 添加X轴数据,注意这里使用了较长的标签名称
    .add_xaxis(
        [
            "名字很长的X轴标签1",
            "名字很长的X轴标签2",
            "名字很长的X轴标签3",
            "名字很长的X轴标签4",
            "名字很长的X轴标签5",
            "名字很长的X轴标签6",
        ]
    )
    # 添加两组Y轴数据
    .add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
    .add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
    # 设置全局配置项
    .set_global_opts(
        # 旋转X轴标签以解决过长问题
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        # 设置标题和副标题
        title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
    )
)
# 在notebook中显示图表
c.render_notebook()

首先,我们导入了必要的模块。然后,创建了一个Bar对象并添加了X轴数据,这里特意使用了较长的标签名称来演示问题。

通过,我们添加了两组Y轴数据,分别代表商家A和商家B。

因为X轴标签过长可能会导致重叠,我们在全局配置项中设置了X轴标签的旋转角度为-15度,这样标签会倾斜显示,避免重叠。同时,我们还设置了图表的标题和副标题,使图表更加完整。

图表三:基础堆叠柱状图

python 复制代码
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

# 创建图表对象
c = (
    Bar()
    # 使用Faker库生成X轴数据
    .add_xaxis(Faker.choose())
    # 添加两组Y轴数据并设置堆叠
    .add_yaxis("商家A", Faker.values(), stack="stack1")
    .add_yaxis("商家B", Faker.values(), stack="stack1")
    # 设置系列配置项,隐藏标签
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    # 设置全局配置项,添加标题
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(全部)"))
)
# 在notebook中显示图表
c.render_notebook()

首先,我们导入了必要的模块,包括Faker库用于生成模拟数据。

通过,我们创建了一个Bar对象,并使用Faker.choose()生成了X轴的类别数据。然后,添加了两组Y轴数据,都使用Faker.values()生成随机数值,并将它们设置为堆叠显示。

因为这里主要展示堆叠效果,我们隐藏了数据标签以避免图表过于拥挤。最后,我们添加了图表标题,使图表更加清晰。

图表四:带时间轴的宏观经济指标组合图表

这个图表是一个动态的组合可视化,通过时间轴展示2002-2011年全国各地区的多维度经济数据,并结合柱状图和饼图呈现详细数据与占比关系。

代码实现解析

首先,定义了核心函数 get_year_overlap_chart,它接收一个年份参数并返回该年份的组合图表:

python 复制代码
#数据可以去pyecharts官网获取
#####################################################################################
# 2002 - 2011 年的数据
def get_year_overlap_chart(year: int) -> Bar:
    # 创建柱状图
    bar = (Bar()
        .add_xaxis(xaxis_data=name_list)  # 添加地区名称作为X轴
        # 添加6个数据系列
        .add_yaxis(series_name="GDP", y_axis=total_data["dataGDP"][year], label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis(series_name="金融", y_axis=total_data["dataFinancial"][year], label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis(series_name="房地产", y_axis=total_data["dataEstate"][year], label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis(series_name="第一产业", y_axis=total_data["dataPI"][year], label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis(series_name="第二产业", y_axis=total_data["dataSI"][year], label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis(series_name="第三产业", y_axis=total_data["dataTI"][year], label_opts=opts.LabelOpts(is_show=False))
        # 设置全局配置
        .set_global_opts(
            title_opts=opts.TitleOpts(title="{}全国宏观经济指标".format(year), subtitle="数据来自国家统计局"),
            tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="shadow"),
            legend_opts=opts.LegendOpts(selected_map={"GDP": False, "金融": False, "房地产": False})
        )
    )
    # 创建饼图
    pie = (Pie()
        .add(
            series_name="GDP占比",
            data_pair=[
                ["第一产业", total_data["dataPI"]["{}sum".format(year)]],
                ["第二产业", total_data["dataSI"]["{}sum".format(year)]],
                ["第三产业", total_data["dataTI"]["{}sum".format(year)]]
            ],
            center=["75%", "35%"], radius="28%"
        )
        .set_series_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger="item"))
    )
    return bar.overlap(pie)  # 重叠饼图到柱状图上

通过这段代码,我们可以看到:

  1. 柱状图部分 :展示了各地区(name_list)在六个经济指标上的数据,包括GDP、金融、房地产、第一产业、第二产业和第三产业。所有标签都被隐藏以避免图表拥挤。

  2. 图例配置 :默认将GDP、金融、房地产三个系列设置为不选中状态(selected_map),因为这三个指标数值通常远大于产业数据,这样设置可以让初始视图更清晰地展示产业结构。

  3. 饼图部分 :位于图表右侧(center=["75%", "35%"]),展示了该年份第一、二、三产业在GDP中的占比情况,数据来自各产业的年度总和(如total_data["dataPI"]["{}sum".format(year)])。

  4. 重叠显示 :使用.overlap(pie)方法将饼图叠加到柱状图上,实现了两种图表类型的融合展示。

时间轴功能

代码的第二部分创建了时间轴,实现了数据的动态展示:

python 复制代码
timeline = Timeline()
for y in range(2002, 2012):
    timeline.add(get_year_overlap_chart(year=y), time_point=str(y))
timeline.add_schema(is_auto_play=True, play_interval=1000)
timeline.render_notebook()

因为添加了时间轴,图表可以自动播放(is_auto_play=True),每1000毫秒切换一个年份(play_interval=1000),直观地展示2002-2011年十年间经济数据的变化趋势。

图表特点
  1. 多维度数据展示:同时呈现六个经济指标,提供全面的经济图景。
  2. 组合可视化:柱状图展示地区差异,饼图展示产业结构,互补性强。
  3. 交互式体验:时间轴动画展示数据变化,图例可交互切换指标显示。
  4. 数据层次清晰:通过默认隐藏大数值指标,突出展示产业结构比例。

这个图表设计巧妙,既展示了各地区的详细经济数据,又呈现了全国层面的产业结构,同时通过时间轴展示了十年间的变化趋势,是一个信息密度高、交互性强的综合可视化作品。

图表五:使用字典配置的基础柱状图

这个图表展示了pyecharts库的另一种配置方式------通过字典进行配置,更加灵活简洁。

代码实现解析
python 复制代码
from pyecharts.charts import Bar 
from pyecharts.faker import Faker 
from pyecharts.globals import ThemeType 

c = (
    Bar({"theme": ThemeType.MACARONS})  # 使用字典配置主题
    .add_xaxis(Faker.choose())  # 添加X轴数据
    .add_yaxis("商家A", Faker.values())  # 添加商家A的数据
    .add_yaxis("商家B", Faker.values())  # 添加商家B的数据
    .set_global_opts(
        title_opts={"text": "Bar-通过 dict 进行配置", "subtext": "我也是通过 dict 进行配置的"} 
    )
    #.render("bar_base_dict_config.html") 
)
c.render_notebook()
核心特点
  1. 字典配置方式 :与之前使用opts对象不同,这里直接使用Python字典进行配置。例如:

    • Bar({"theme": ThemeType.MACARONS}):通过字典设置主题
    • title_opts={"text": "Bar-通过 dict 进行配置", "subtext": "我也是通过 dict 进行配置的"}:通过字典设置标题
  2. 马卡龙主题 :使用了ThemeType.MACARONS主题,这是pyecharts提供的一种色彩鲜艳、现代感强的主题风格。

  3. 模拟数据 :继续使用Faker库生成模拟数据:

    • Faker.choose():生成类别数据作为X轴
    • Faker.values():生成随机数值作为Y轴数据
  4. 简洁明了:代码结构简单,易于理解,适合初学者上手。

与其他图表的对比

与前面的图表相比,这个图表的最大特点是配置方式的不同。pyecharts支持两种主要配置方式:

  • 对象配置:使用opts相关类,如opts.TitleOptsopts.AxisOpts
  • 字典配置:直接使用Python字典,键为配置项名称,值为配置值

两种方式各有优势:对象配置提供了更好的类型提示和自动补全,而字典配置更加灵活简洁。

适用场景

这种基础柱状图适用于:

  • 简单的数据对比展示
  • 快速生成图表原型
  • 学习pyecharts的基础用法
  • 需要使用字典配置方式的场景

这个图表虽然简单,但展示了pyecharts的核心功能和灵活的配置方式,是学习pyecharts的很好起点。

相关推荐
laufing几秒前
flask_restx 创建restful api
python·flask·restful
程途拾光15830 分钟前
中文界面跨职能泳道图制作教程 PC
大数据·论文阅读·人工智能·信息可视化·流程图
毕设源码-郭学长43 分钟前
【开题答辩全过程】以 基于python电商商城系统为例,包含答辩的问题和答案
开发语言·python
black0moonlight44 分钟前
win11 isaacsim 5.1.0 和lab配置
python
知乎的哥廷根数学学派1 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
网安CILLE1 小时前
PHP四大输出语句
linux·开发语言·python·web安全·网络安全·系统安全·php
jjjddfvv1 小时前
超级简单启动llamafactory!
windows·python·深度学习·神经网络·微调·audiolm·llamafactory
A先生的AI之旅1 小时前
2025顶会TimeDRT快速解读
人工智能·pytorch·python·深度学习·机器学习
程序员小远1 小时前
完整的项目测试方案流程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例