查看全课大纲(第 15 / 45 节)
- 1.课程简介
- 2.环境搭建
- 3.预备知识
- 4.pyecharts初体验
- 5.数据可视化概述
- 6.数据可视化的目标和作用
- 7.数据可视化工具对比分析
- 8.数据可视化基本流程
- 9.数据可视化设计原则
- 10.pyecharts简介
- 11.官方图表样例
- 12.常用图表的基本结构
- 13.数据格式
- 14.图表的分类
- 15.柱状图与条形图
- 16.其他对比图表
- 17.常用配置项(一)
- 18.常用配置项(二)
- 19.折线图 面积图
- 20.K线图
- 21.其他时间图表
- 22.常用配置项
- 23.散点图 气泡图
- 24.热力图
- 25.其他相关性图表
- 26.饼图
- 27.矩形树图
- 28.其他成分比例图表
- 29.箱型图与直方图
- 30.3D柱状图与折线图
- 31.其他统计图表
- 32.地图 Map
- 33.地理坐标系Geo
- 34.3D 地图
- 35.网络关系图
- 36.主题河流图
- 37.词云图
- 38.组合图表组件
- 39.仪表盘相关图表
- 40.项目介绍
- 41.数据准备
- 42.子图制作(一)
- 43.子图制作(二)
- 44.数据大屏制作
- 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"])
图表类型: 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轴进行翻转,使柱子水平放置。它特别适用于以下场景:
- 类别名称较长:横向布局为长文本提供了更多空间,避免文字重叠或倾斜。
- 类别数量较多:网页或文档在垂直方向上的滚动空间通常比水平方向更充裕,更适合展示长列表。
在 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📝 动手练一练
- 场景选择:假设你需要向管理层汇报“公司五大产品线本季度的销售额对比”,你会选择柱状图还是条形图?为什么?
- 代码实践:请使用链式调用的方式,创建一个包含“北京”、“上海”、“广州”、“深圳”四个城市,以及对应“第一季度”和“第二季度”销售额(数据自拟)的分组柱状图,并将图表保存为
city_sales.html。
点击查看参考答案
场景选择:通常选择柱状图。因为产品线名称一般较短(如“产品A”、“产品B”),类别数量适中(5个),柱状图垂直排列能更直观地体现“高度”代表的数值大小对比,符合大多数人的阅读习惯。如果产品线名称非常长或数量超过10个,则可考虑条形图。
代码实践:
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"))这行去掉,图表会变成什么样子?动手验证你的猜想。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。