查看全课大纲(第 15 / 45 节)

柱状图与条形图

小象实战讲义 · ECharts 数据可视化

欢迎进入第四章《项目对比可视化》的学习。在前三章,我们完成了环境搭建、了解了数据可视化概述,并掌握了ECharts的基本使用。从本章开始,我们将系统性地学习各类图表的绘制与配置。本节作为开篇,将聚焦于最基础、最常用的对比类图表——柱状图与条形图。学完本节,你将能够使用pyecharts绘制标准的柱状图,并根据数据展示需求,灵活地将其转换为横向的条形图。

💡 核心导读

  • 图表选型:理解柱状图适用于多分类间的数值对比,但不适合展示趋势或过多类别。
  • 数据构造:掌握使用pyecharts内置的Faker模块快速生成演示数据。
  • 两种调用:学会使用“普通调用”和“链式调用”两种方式构建图表。
  • 坐标翻转:通过reversal_axis()方法将柱状图转换为条形图,并调整标签位置以适应新布局。
  • 结果交付:了解将图表渲染为独立的HTML文件,以便于分享和嵌入网页。

1. 柱状图:多分类对比的利器

柱状图通过垂直(或水平)柱子的高度(或长度)来比较不同分类下的数值大小。其中一个坐标轴(通常是横轴)代表分类类别,另一个坐标轴(通常是纵轴)代表数值刻度。

适用场景:非常适合用于多个分类间的数据对比,例如比较不同产品、不同地区或不同时间点(非趋势)的销售额、用户数等。 不适用场景:

  • 不适合表示数据随时间变化的趋势(折线图更合适)。
  • 不适合类别过多的情况,否则会导致图形拥挤,难以辨识。

2. 快速上手:从数据到图表

在深入学习绘图前,我们先认识一个得力助手——Faker模块。它内置了多种类型的示例数据,方便我们快速进行图表原型设计,而无需四处寻找真实数据集。

# 引入Faker模块
from pyecharts.faker import Faker

# 使用Faker生成示例数据
# .values() 生成一个包含7个随机整数的列表(范围约在20-150)
# .choose() 随机返回一个预设的类别名称列表(如服装、饮料、手机品牌等)
categories = Faker.choose()
values = Faker.values()

有了数据,我们就可以开始绘制柱状图。pyecharts 提供了两种编程风格:普通调用与链式调用。前者步骤清晰,后者简洁连贯。普通调用的结构示意如下;完整可运行示例采用链式调用。

bar_simple = Bar()
bar_simple.add_xaxis(categories)
bar_simple.add_yaxis("组A", sales_a)
bar_simple.add_yaxis("组B", sales_b)
from pyecharts import options as opts
from pyecharts.charts import Bar

categories = ["华东", "华南", "华北", "西南"]
sales_a = [120, 98, 76, 64]
sales_b = [80, 72, 61, 48]

# 链式调用绘制分组柱状图
bar = (
    Bar()  # 1. 创建Bar图表实例
    .add_xaxis(categories)  # 2. 设置X轴数据(分类)
    .add_yaxis("组A", sales_a)  # 3. 添加第一个数据系列
    .add_yaxis("组B", sales_b)  # 4. 添加第二个数据系列
)

print("图表类型:", bar.__class__.__name__)
print("分类数量:", len(categories))
print("系列数量:", 2)
print("系列名称:", ["组A", "组B"])
华东、华南、华北、西南四组区域的组A和组B销量分组柱状图
图:分组柱状图实际渲染:细看颜色图例、类目轴和四组区域的柱子高低。手机端自动使用简化视图,点击图片可看大图。
图表类型: Bar
分类数量: 4
系列数量: 2
系列名称: ['组A', '组B']

图表绘制完成后,我们需要将其输出。render() 方法可以把配置和数据写进独立 HTML 文件;默认情况下浏览器仍需联网加载 ECharts 脚本,若要完全离线打开,应把 CurrentConfig.ONLINE_HOST 指向课程提供的本地 assets/ 资源。Jupyter 用户也可以在 Notebook 中调用 render_notebook() 内联显示,本课可运行块统一交付 HTML,避免绑定 Notebook 扩展。

from pyecharts import options as opts
from pyecharts.charts import Bar

categories = ["华东", "华南", "华北", "西南"]
sales_a = [120, 98, 76, 64]
sales_b = [80, 72, 61, 48]
bar2 = (
    Bar()
    .add_xaxis(categories)
    .add_yaxis("组A", sales_a)
    .add_yaxis("组B", sales_b)
)

# 渲染为HTML文件
bar2.render("basic_bar.html")
print("图表已保存为 'basic_bar.html',可在浏览器中打开查看。")
图表已保存为 'basic_bar.html',可在浏览器中打开查看。

3. 条形图:柱状图的横向变体

条形图本质上是将柱状图的X轴和Y轴进行翻转,使柱子水平放置。它特别适用于以下场景:

  1. 类别名称较长:横向布局为长文本提供了更多空间,避免文字重叠或倾斜。
  2. 类别数量较多:网页或文档在垂直方向上的滚动空间通常比水平方向更充裕,更适合展示长列表。

在 pyecharts 中,只需在柱状图的基础上调用 .reversal_axis() 方法即可翻转坐标轴。标签默认位置为 top;坐标翻转后这个位置不再适合水平柱,因此需要通过系列配置项把它改到柱子右侧的 right。

from pyecharts import options as opts
from pyecharts.charts import Bar

categories = ["华东", "华南", "华北", "西南"]
sales_a = [120, 98, 76, 64]
sales_b = [80, 72, 61, 48]

# 绘制条形图
bar3 = (
    Bar()
    .add_xaxis(categories)
    .add_yaxis("组A", sales_a)
    .add_yaxis("组B", sales_b)
    # 设置系列配置:将数据标签显示在柱子右侧
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    # 翻转X轴和Y轴,将柱状图变为条形图
    .reversal_axis()
)

# 查看图表配置摘要,确认坐标轴已翻转
print("图表类型(翻转后):", bar3.__class__.__name__)
print("分类数量:", len(categories))
print("系列数量:", 2)
print("数据标签位置:", "right")
图表类型(翻转后): Bar
分类数量: 4
系列数量: 2
数据标签位置: right

📝 动手练一练

  1. 场景选择:假设你需要向管理层汇报“公司五大产品线本季度的销售额对比”,你会选择柱状图还是条形图?为什么?
  2. 代码实践:请使用链式调用的方式,创建一个包含“北京”、“上海”、“广州”、“深圳”四个城市,以及对应“第一季度”和“第二季度”销售额(数据自拟)的分组柱状图,并将图表保存为city_sales.html。
点击查看参考答案
  1. 场景选择:通常选择柱状图。因为产品线名称一般较短(如“产品A”、“产品B”),类别数量适中(5个),柱状图垂直排列能更直观地体现“高度”代表的数值大小对比,符合大多数人的阅读习惯。如果产品线名称非常长或数量超过10个,则可考虑条形图。

  2. 代码实践:

from pyecharts.charts import Bar

# 自拟数据
cities = ["北京", "上海", "广州", "深圳"]
sales_q1 = [420, 580, 390, 510]  # 第一季度销售额(万元)
sales_q2 = [450, 620, 410, 540]  # 第二季度销售额(万元)

chart = (
    Bar()
    .add_xaxis(cities)
    .add_yaxis("第一季度", sales_q1)
    .add_yaxis("第二季度", sales_q2)
)
chart.render("city_sales.html")
print("城市销售额对比图已保存。")
城市销售额对比图已保存。

本章小结

本节我们学习了对比可视化中最基础的两种图表。柱状图以其直观的高度对比,成为分类数据比较的首选。而条形图作为其横向变体,则在处理长文本或多类别时展现出独特优势。通过Faker模块、链式调用和render()方法,我们掌握了从快速原型到成果交付的完整工作流。

📋 行动清单

  • 在Python环境中运行本节所有代码块,确保能成功生成HTML文件并在浏览器中查看。
  • 修改示例中的 categories、sales_a 和 sales_b,观察图表分类与数值的变化。
  • 思考:如果将条形图代码中的.set_series_opts(label_opts=opts.LabelOpts(position="right"))这行去掉,图表会变成什么样子?动手验证你的猜想。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 04_项目对比可视化.ipynb · ECharts 课程配套资源
    IPYNB · 章级代码与输出
    下载
  • basic_bar.html · ECharts 课程配套资源
    课程配套文件
    下载
  • sales.csv · ECharts 课程配套资源
    课程配套文件
    下载