Matplotlib 柱形图(长文解析)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在数据可视化的世界中,Matplotlib 柱形图是分析和展示数据差异的利器。无论是比较不同类别的销售数据,还是展示时间序列中的关键指标,柱形图都能通过直观的垂直或水平条形,帮助读者快速捕捉数据中的核心信息。对于编程初学者和中级开发者而言,掌握 Matplotlib 柱形图 的核心功能与高级技巧,不仅能提升数据分析效率,还能为后续探索更复杂的可视化技术打下坚实基础。

本文将从零开始,通过实际案例和代码示例,系统讲解如何用 Python 的 Matplotlib 库绘制柱形图,并逐步深入到颜色调整、数据分组、动态效果等高级技巧。即使你对编程或数据可视化完全陌生,也能通过本文的循序渐进式讲解,掌握这一实用技能。


安装与环境准备

首先,确保你的 Python 环境已安装 Matplotlib 库。若尚未安装,可通过以下命令快速完成:

pip install matplotlib  

接下来,导入库并初始化绘图环境:

import matplotlib.pyplot as plt  
import numpy as np  

其中,numpy 用于生成示例数据,而 pltMatplotlib 的核心接口。


绘制基础柱形图

1. 最简单的柱形图

让我们从一个销售数据的简单案例开始。假设某公司 6 个月的销售额如下:

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']  
sales = [200, 240, 190, 310, 280, 350]  

绘制基础柱形图只需一行代码:

plt.bar(months, sales)  
plt.show()  

效果说明

  • plt.bar() 是绘制柱形图的核心函数,接受 x(类别标签)和 y(数值)作为基本参数。
  • plt.show() 用于显示图形。

2. 理解关键参数

基础柱形图的视觉效果可通过调整以下参数优化:
| 参数 | 描述 | 默认值 |
|------------|----------------------------------------|--------------|
| height | 每个柱子的高度(与 y 参数等价) | None |
| width | 柱子的宽度 | 0.8 |
| color | 柱子的颜色 | 蓝色 |
| align | 柱子与 x 轴的对齐方式(如 'center') | 'center' |

示例:调整柱子宽度和颜色:

plt.bar(months, sales, width=0.6, color='green')  
plt.show()  

自定义柱形图:添加标签与标题

1. 添加坐标轴标签与标题

基础柱形图缺乏文字说明,需通过以下代码补充:

plt.bar(months, sales)  
plt.title("Monthly Sales Performance")  
plt.xlabel("Month")  
plt.ylabel("Sales (in thousands)")  
plt.show()  

效果说明

  • plt.title() 设置图表标题。
  • plt.xlabel()plt.ylabel() 分别定义坐标轴标签。

2. 调整字体与样式

通过 fontdict 参数可统一调整文字样式:

plt.title("Monthly Sales Performance",  
          fontdict={'family': 'Arial', 'size': 14, 'color': 'darkred'})  
plt.xlabel("Month", fontdict={'size': 12, 'weight': 'bold'})  

进阶技巧:多组数据对比

1. 分组柱形图(Grouped Bar Chart)

当需要对比多个类别时,可将不同数据集并排显示。例如,比较两个产品线的月销售额:

products = ['Product A', 'Product B']  
sales_A = [200, 220, 190, 280, 260, 300]  
sales_B = [180, 200, 210, 250, 290, 320]  

x = np.arange(len(months))  
width = 0.35  

plt.bar(x - width/2, sales_A, width, label='Product A')  
plt.bar(x + width/2, sales_B, width, label='Product B')  

plt.xticks(x, months)  # 设置 x 轴标签  
plt.legend()  
plt.show()  

核心思想

  • 通过调整 x 轴的位置(如 x - width/2x + width/2),将不同数据集错开显示。
  • plt.legend() 添加图例说明各柱子的含义。

2. 堆叠柱形图(Stacked Bar Chart)

若需展示数据的总和及组成部分,可使用堆叠方式:

plt.bar(months, sales_A, label='Product A')  
plt.bar(months, sales_B, bottom=sales_A, label='Product B')  # 栈顶数据叠加在底部  
plt.legend()  
plt.show()  

关键参数

  • bottom 指定柱子的起始位置,使新柱子堆叠在现有柱子之上。

高级功能:动态与交互性

1. 条件着色:根据数值调整颜色

通过循环遍历数据,为不同数值区间分配颜色:

colors = []  
for sale in sales:  
    if sale > 300:  
        colors.append('green')  
    elif sale > 250:  
        colors.append('orange')  
    else:  
        colors.append('red')  

plt.bar(months, sales, color=colors)  
plt.show()  

2. 数据归一化:比较不同量级的数据

当数据差异过大时,可先归一化处理:

normalized_sales = sales / max(sales)  
plt.bar(months, normalized_sales)  
plt.ylabel("Normalized Sales")  

实战案例:学生成绩分析

假设某班级的数学与英语成绩如下:

students = ['Alice', 'Bob', 'Charlie', 'Diana']  
math_scores = [85, 92, 78, 88]  
english_scores = [75, 88, 90, 82]  

x = np.arange(len(students))  
width = 0.35  

plt.figure(figsize=(10,6))  # 设置画布尺寸  
plt.bar(x - width/2, math_scores, width, label='Math')  
plt.bar(x + width/2, english_scores, width, label='English')  

plt.title("Student Performance Comparison")  
plt.xlabel("Students")  
plt.ylabel("Scores")  
plt.xticks(x, students)  
plt.legend()  
plt.grid(axis='y', linestyle='--', alpha=0.7)  # 添加网格线  
plt.show()  

输出效果

  • 通过 figsize 调整图表尺寸。
  • plt.grid() 增强图表的可读性。

总结

Matplotlib 柱形图 是数据可视化的基础工具,其核心在于通过参数调整和逻辑组合,实现从简单到复杂的数据表达。本文覆盖了以下关键点:

  1. 基础绘制:快速生成柱形图并理解核心参数。
  2. 自定义细节:添加标签、标题、调整颜色与字体。
  3. 多组数据对比:分组与堆叠的实现逻辑。
  4. 高级技巧:动态着色、数据归一化与交互增强。

通过不断练习与案例实践,读者可以逐步掌握 Matplotlib 的全部潜力,甚至结合其他库(如 seaborn)进一步扩展可视化能力。记住,数据可视化的本质是“用图形说话”,而 Matplotlib 柱形图 将是你传递清晰信息的第一把钥匙。

提示:尝试将本文代码复制到 Jupyter Notebook 或 IDE 中运行,观察不同参数对结果的影响。实践是掌握 Matplotlib 柱形图 的最佳途径!

最新发布