Matplotlib 柱形图(完整指南)

从零开始掌握 Matplotlib 柱形图:数据可视化的入门利器

在数据分析的世界里,数据本身是冰冷的数字,而可视化则是赋予它们温度的魔法。当你面对一堆数字表格时,是否曾想过:如果能用一张图把它们“讲”出来,岂不是更直观?这正是 Matplotlib 柱形图的魅力所在——它像一位冷静又清晰的讲解员,把复杂的数据关系,用一根根柱子“摆”得明明白白。

Matplotlib 是 Python 中最主流的绘图库,而柱形图则是它最基础、最常用的功能之一。无论是比较不同产品的销量,还是分析各地区的人口分布,柱形图都能以最直观的方式呈现信息。今天,我们就从零开始,手把手带你掌握 Matplotlib 柱形图的核心用法,让你的数据表达力瞬间升级。


什么是柱形图?它的核心作用是什么?

柱形图,顾名思义,就是由一系列垂直或水平的矩形柱子组成的图表。每根柱子的高度(或长度)代表一个数值,柱子之间的位置关系则表示类别。它特别适合用于比较不同类别的数量差异

想象一下你正在开一家小咖啡馆,想看看上周五、周六、周日三天的咖啡销量。如果你只看表格,可能会被“68、92、75”这些数字绕晕。但如果你把它们画成三根柱子,一眼就能看出周六卖得最好——这就是柱形图的价值。

在 Matplotlib 中,我们使用 pyplot.bar() 函数来创建柱形图。它简单、高效,是数据可视化入门的第一站。


创建数组与初始化:数据准备是关键

在画图之前,我们必须先准备好数据。这就像做菜前要洗菜切菜一样,数据准备是绘图的基础。

import matplotlib.pyplot as plt

days = ['周五', '周六', '周日']

sales = [68, 92, 75]

plt.bar(days, sales)

plt.show()

代码注释

  • days 是横坐标标签,代表三个不同的类别(周五、周六、周日)
  • sales 是纵坐标数值,对应每个类别的数据值
  • plt.bar(days, sales) 是核心函数,第一个参数是类别标签,第二个是对应数值
  • plt.show() 用于在窗口中显示图形,没有这行代码,图不会出现

运行这段代码,你将看到一个简洁的柱形图,三根柱子清晰地展示了三天的销量对比。


优化图表样式:让图形更有“说服力”

原始的柱形图虽然能看懂,但略显单调。我们可以通过调整颜色、添加标题、设置坐标轴标签等方式,让图表更具专业感。

import matplotlib.pyplot as plt

days = ['周五', '周六', '周日']
sales = [68, 92, 75]

plt.bar(days, sales, color='skyblue', edgecolor='black', linewidth=1)

plt.title('上周三日咖啡销量对比', fontsize=14, fontweight='bold')
plt.xlabel('星期', fontsize=12)
plt.ylabel('销量(杯)', fontsize=12)

plt.show()

代码注释

  • color='skyblue' 设置柱子颜色为天蓝色,更美观
  • edgecolor='black'linewidth=1 为柱子添加黑色边框,增强轮廓感
  • plt.title() 设置图表主标题,fontsize 控制字体大小,fontweight 让标题更醒目
  • xlabel()ylabel() 分别设置横纵坐标轴的标签
  • 这些细节让图表从“能看”升级为“好看又专业”

此时,你的图表已经具备了发布在报告中的基本素质。


多组数据对比:并列柱形图的实现

现实场景中,我们常常需要对比多组数据。比如,你想比较“咖啡”和“奶茶”在三天内的销量。

这时,我们可以使用并列柱形图(Grouped Bar Chart),让每类别的两个柱子并排出现。

import matplotlib.pyplot as plt

days = ['周五', '周六', '周日']
coffee_sales = [68, 92, 75]
milk_tea_sales = [50, 80, 65]

width = 0.35  # 柱子宽度
x = range(len(days))  # 位置索引:0, 1, 2

plt.bar(x, coffee_sales, width=width, label='咖啡', color='sandybrown')
plt.bar([i + width for i in x], milk_tea_sales, width=width, label='奶茶', color='lightcoral')

plt.xlabel('星期')
plt.ylabel('销量(杯)')
plt.title('咖啡与奶茶销量对比(上周)')
plt.xticks([i + width/2 for i in x], days)  # 设置横轴标签位置
plt.legend()  # 显示图例

plt.show()

代码注释

  • width=0.35 控制柱子宽度,避免重叠
  • x = range(len(days)) 生成位置索引 [0, 1, 2]
  • 第一组柱子画在 x 位置,第二组画在 x + width 位置,实现错位
  • plt.xticks() 设置横轴标签的位置,使用 i + width/2 将标签放在两组柱子中间
  • plt.legend() 显示图例,帮助用户识别哪根柱子代表什么产品

这种并列设计让你能一眼看出“哪天卖得更多”、“哪种饮品更受欢迎”,信息传达效率极高。


垂直 vs 水平柱形图:选择合适的表达方式

柱形图可以是垂直的,也可以是水平的。选择哪种,取决于你的数据结构和展示需求。

当类别名称较长时,水平柱形图更清晰。比如你要比较“北京、上海、广州、深圳、杭州”五个城市的GDP。

import matplotlib.pyplot as plt

cities = ['北京', '上海', '广州', '深圳', '杭州']
gdp = [3.46, 4.32, 2.85, 3.27, 2.05]

plt.barh(cities, gdp, color='lightgreen', edgecolor='darkgreen', linewidth=1)

plt.title('2023年五大城市GDP对比(单位:万亿元)', fontsize=13)
plt.xlabel('GDP(万亿元)')
plt.ylabel('城市')

plt.show()

代码注释

  • 使用 barh() 函数绘制水平柱形图,h 代表 horizontal(水平)
  • 横轴是数值(GDP),纵轴是类别(城市),适合长标签
  • coloredgecolor 保持风格统一,提升可读性
  • 水平布局让城市名称更易阅读,避免文字倾斜或重叠

水平柱形图在展示长类别标签时,优势明显,是处理这类数据的优选方案。


高级技巧:添加数值标签与自定义颜色

为了让图表更具信息量,我们可以在每根柱子上方添加具体的数值。

import matplotlib.pyplot as plt

products = ['A', 'B', 'C', 'D']
sales = [120, 150, 90, 180]

bars = plt.bar(products, sales, color='steelblue')

for bar, value in zip(bars, sales):
    plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 1, 
             str(value), ha='center', va='bottom', fontsize=10, fontweight='bold')

plt.title('各产品销量对比', fontsize=14)
plt.xlabel('产品')
plt.ylabel('销量(件)')

plt.show()

代码注释

  • bars = plt.bar(...) 保存返回的柱子对象,用于后续操作
  • bar.get_x()bar.get_width() 获取柱子的起始位置和宽度
  • get_height() 获取柱子高度,即数值
  • plt.text() 在指定坐标添加文字,ha='center' 居中对齐,va='bottom' 文字位于柱子上方
  • fontsizefontweight 让数字更突出

这种技巧让读者无需再“猜”柱子对应数值,信息一目了然。


总结:Matplotlib 柱形图的核心价值

Matplotlib 柱形图是数据可视化中最基础也最实用的工具之一。它结构清晰、使用简单,却能承载丰富的信息。通过本篇教程,你已经掌握了:

  • 如何从零开始绘制基础柱形图
  • 如何优化样式提升可读性
  • 如何实现多组数据对比的并列柱形图
  • 如何根据数据特点选择垂直或水平布局
  • 如何添加数值标签,增强信息传达力

掌握这些技能后,你不仅能轻松应对日常数据分析任务,还能在报告、论文、项目展示中,用一张图讲清一个故事。数据可视化不是炫技,而是让复杂变简单。而 Matplotlib 柱形图,正是你迈出这一步的最佳起点。