news 2026/5/2 12:53:02

别再只会画基础条形图了!用Matplotlib的plt.bar玩转5种实用数据可视化场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只会画基础条形图了!用Matplotlib的plt.bar玩转5种实用数据可视化场景

解锁Matplotlib条形图的5个高阶玩法:从销售分析到实验报告

在数据科学领域,条形图就像瑞士军刀一样基础却不可或缺。但大多数数据分析师仅仅停留在plt.bar(x, height)的初级阶段,殊不知Matplotlib的条形图函数藏着令人惊艳的深度定制能力。本文将带您突破基础用法,探索五个真实业务场景下的高级可视化技巧。

1. 分组条形图:多维度销售对比分析

当需要对比不同时间段或产品线的业绩时,简单的单系列条形图会显得力不从心。这时分组条形图就能清晰展示复杂数据关系。

假设我们需要分析2022-2023年各季度的智能手机销量,数据如下:

import numpy as np import matplotlib.pyplot as plt quarters = ['Q1', 'Q2', 'Q3', 'Q4'] sales_2022 = [120, 150, 180, 210] # 单位:千台 sales_2023 = [140, 170, 200, 240]

关键技巧在于控制条形的宽度和位置:

bar_width = 0.35 # 每组中单个条形的宽度 x = np.arange(len(quarters)) # 生成位置索引 plt.bar(x - bar_width/2, sales_2022, width=bar_width, label='2022') plt.bar(x + bar_width/2, sales_2023, width=bar_width, label='2023') plt.xticks(x, quarters) # 设置x轴标签 plt.xlabel('Quarter') plt.ylabel('Sales (thousands)') plt.title('Smartphone Sales by Quarter') plt.legend() plt.show()

参数精要

  • width:控制单个条形的宽度
  • x - bar_width/2x + bar_width/2:精确定位两组条形的位置
  • edgecolor:可添加边框增强可读性(如edgecolor='black'

2. 堆叠条形图:项目贡献度分解

在项目管理或预算分析中,我们常需要展示各组成部分对整体的贡献。堆叠条形图通过垂直累积的方式,直观呈现这种"部分-整体"关系。

以某公司三个部门的季度支出为例:

departments = ['R&D', 'Marketing', 'Operations'] salaries = [120, 90, 110] equipment = [30, 20, 40] travel = [10, 30, 15]

构建堆叠效果的关键是bottom参数:

plt.bar(departments, salaries, label='Salaries') plt.bar(departments, equipment, bottom=salaries, label='Equipment') plt.bar(departments, travel, bottom=np.array(salaries)+np.array(equipment), label='Travel') plt.ylabel('Expenditure ($10k)') plt.title('Quarterly Department Expenditure') plt.legend(bbox_to_anchor=(1.05, 1)) # 将图例放在图表右侧 plt.tight_layout() # 自动调整布局

提示:使用np.array进行向量运算可避免Python列表相加的拼接行为

3. 水平条形图:产品性能排名

当类别名称较长或需要强调排名时,水平条形图(使用plt.barh)往往比垂直版本更合适。这在竞品分析或绩效评估中特别有用。

假设我们有以下手机品牌的用户满意度评分:

brands = ['Apple', 'Samsung', 'Xiaomi', 'Oppo', 'Vivo'] scores = [8.7, 8.2, 7.9, 7.5, 7.3]

制作专业排名图的技巧:

# 按分数排序 sorted_idx = np.argsort(scores) brands_sorted = [brands[i] for i in sorted_idx] scores_sorted = [scores[i] for i in sorted_idx] plt.barh(brands_sorted, scores_sorted, color='skyblue') plt.xlim(6, 9) # 固定x轴范围以增强比较效果 plt.xlabel('Satisfaction Score (1-10)') plt.title('Smartphone Brand Satisfaction Ranking') # 添加数据标签 for i, v in enumerate(scores_sorted): plt.text(v + 0.1, i, str(v), color='black', va='center')

进阶技巧:使用渐变色反映排名

colors = plt.cm.Blues(np.linspace(0.3, 1, len(brands))) plt.barh(brands_sorted, scores_sorted, color=colors)

4. 误差条形图:科学实验数据展示

在科研和A/B测试中,展示数据的变异性与置信区间至关重要。误差条形图通过添加误差线,直观传达数据的可靠性。

假设我们测量了三种肥料对作物产量的影响:

fertilizers = ['A', 'B', 'C'] mean_yield = [20, 25, 22] # 平均产量 (kg) std_dev = [1.5, 2.0, 1.8] # 标准差

使用yerr参数添加误差线:

bars = plt.bar(fertilizers, mean_yield, yerr=std_dev, capsize=5, color='lightgreen', edgecolor='darkgreen') # 自定义误差线样式 error_attributes = {'elinewidth': 2, 'ecolor': 'darkred', 'capsize': 10} plt.bar(fertilizers, mean_yield, **error_attributes) plt.ylabel('Crop Yield (kg)') plt.title('Fertilizer Effectiveness with Standard Deviation') # 添加平均值标签 for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2., height, f'{height:.1f}', ha='center', va='bottom')

5. 热力条形图:数据值视觉编码

通过颜色渐变反映数值大小,可以创建出信息密度更高的"热力条形图"。这在数据差异不明显时尤其有效。

以各城市PM2.5指数为例:

cities = ['Beijing', 'Shanghai', 'Guangzhou', 'Chengdu', 'Xian'] pm25 = [45, 38, 32, 42, 48]

创建颜色映射的完整流程:

# 创建归一化的颜色映射 norm = plt.Normalize(min(pm25), max(pm25)) colors = plt.cm.RdYlGn_r(norm(pm25)) # 使用红-黄-绿色谱(反向) bars = plt.bar(cities, pm25, color=colors) # 添加颜色条 sm = plt.cm.ScalarMappable(cmap='RdYlGn_r', norm=norm) sm.set_array([]) plt.colorbar(sm, label='PM2.5 Index') plt.title('City Air Quality Index') plt.ylabel('PM2.5 Concentration (μg/m³)') # 优化标签旋转 plt.xticks(rotation=45, ha='right')

专业提示:使用plt.cm.get_cmap()可以访问所有内置颜色映射,如'viridis'、'plasma'等科学配色方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 12:53:00

避坑指南:在RK3568开发板上搞定IGH EtherCAT Master(Linux 4.19内核)

RK3568实战:IGH EtherCAT Master移植避坑全攻略 在工业自动化领域,实时通信协议的选择往往决定了整个系统的性能上限。当我们把目光投向RK3568这类高性能嵌入式平台时,如何在其上构建稳定可靠的EtherCAT主站系统,成为许多工程师面…

作者头像 李华
网站建设 2026/5/2 12:53:00

网盘直链下载助手:八大主流网盘全速下载终极指南

网盘直链下载助手:八大主流网盘全速下载终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …

作者头像 李华
网站建设 2026/5/2 12:52:50

GoogleTranslateIpCheck:构建高效跨国网络服务的IP质量检测架构设计

GoogleTranslateIpCheck:构建高效跨国网络服务的IP质量检测架构设计 【免费下载链接】GoogleTranslateIpCheck 扫描国内可用的谷歌翻译IP 项目地址: https://gitcode.com/GitHub_Trending/go/GoogleTranslateIpCheck 在全球化互联网服务部署的背景下&#xf…

作者头像 李华
网站建设 2026/5/2 12:52:49

Arduino IDE 2.3.2 配置 UNO R4 WIFI 开发环境避坑指南(附LED矩阵驱动测试)

Arduino UNO R4 WIFI开发环境配置与LED矩阵驱动实战手册 刚拿到Arduino UNO R4 WIFI开发板的兴奋感,往往会被繁琐的环境配置过程浇灭。这块搭载了12x8 LED矩阵和WiFi功能的开发板,确实比传统UNO强大不少,但随之而来的配置问题也让不少开发者头…

作者头像 李华
网站建设 2026/5/2 12:52:47

Python电路仿真终极指南:3步掌握专业级电路设计

Python电路仿真终极指南:3步掌握专业级电路设计 【免费下载链接】PySpice Simulate electronic circuit using Python and the Ngspice / Xyce simulators 项目地址: https://gitcode.com/gh_mirrors/py/PySpice 你是否曾经想过,能不能用Python来…

作者头像 李华