每日五个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的很好起点。

相关推荐
bluebonnet271 小时前
【python】转移本地安装的python包
java·python·eureka
amazinging1 小时前
北京-4年功能测试2年空窗-报培训班学测开-今天来聊聊我的痛苦
python·功能测试·学习·面试
超级晒盐人1 小时前
vue 开发总结:从安装到第一个交互页面-与数据库API
经验分享·python·语言模型·学习方法·微信公众平台
533_2 小时前
[vue3 echarts] echarts 动态数据更新 setInterval
vue.js·echarts
AI 嗯啦2 小时前
机器学习 —— 决策树
python·机器学习
睿思达DBA_WGX2 小时前
Python 程序设计讲义(36):字符串的处理方法——去除字符串头尾字符:strip() 方法、lstrip() 方法与rstrip() 方法
开发语言·python
阿蒙Amon3 小时前
详解Python标准库之互联网数据处理
网络·数据库·python
格调UI成品4 小时前
[特殊字符] 数据可视化结合 three.js:让 3D 呈现更精准,3 个优化经验谈
javascript·3d·信息可视化
啊哈哈哈哈哈啊哈哈4 小时前
G9打卡——ACGAN
python·生成对抗网络·gan