Matplotlib基础绘图实战指南

发布时间:2026/9/29 1:43:56

Matplotlib基础绘图实战指南
1. 为什么选择Matplotlib进行数据可视化当你第一次接触数据分析时可能会被各种图表类型和工具搞得眼花缭乱。作为一个用了Matplotlib近十年的老手我可以负责任地告诉你这个库绝对是Python数据可视化的不二之选。它就像瑞士军刀一样简单但功能强大能满足你90%以上的绘图需求。Matplotlib最大的优势在于它的灵活性。无论是简单的折线图还是复杂的三维曲面图它都能轻松应对。我记得刚开始工作时老板临时要求我分析一组销售数据并制作可视化报告。当时我只用了不到20行代码就生成了包含折线图、柱状图和饼图的多页PDF报告成功在会议上惊艳了所有人。安装Matplotlib非常简单只需要一行命令pip install matplotlib如果你使用的是Anaconda环境也可以通过conda来安装conda install matplotlib2. 准备你的第一张图表让我们从一个真实的销售数据场景开始。假设你有一家电商公司记录了2023年每个月的销售额数据months [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] sales [120, 150, 180, 135, 210, 250, 300, 280, 320, 350, 420, 500]要绘制这些数据的折线图只需要几行代码import matplotlib.pyplot as plt plt.plot(months, sales) plt.title(2023年月度销售额) plt.xlabel(月份) plt.ylabel(销售额(万元)) plt.show()这段代码会生成一张清晰的折线图显示销售额随月份的变化趋势。plot()函数是Matplotlib最基础的绘图函数它接受x轴和y轴的数据自动帮你完成绘图。3. 美化你的图表默认生成的图表虽然能用但离好看还有一定距离。让我们来优化一下plt.figure(figsize(10, 6)) # 设置图表大小 plt.plot(months, sales, colorroyalblue, # 线条颜色 linewidth2, # 线条粗细 markero, # 数据点标记 markersize8) # 标记大小 # 添加网格和样式 plt.grid(True, linestyle--, alpha0.7) plt.title(2023年月度销售额趋势, fontsize16) plt.xlabel(月份, fontsize12) plt.ylabel(销售额(万元), fontsize12) # 旋转x轴标签 plt.xticks(rotation45) plt.tight_layout() # 自动调整布局 plt.show()现在这张图看起来专业多了figsize参数控制图表大小color和linewidth让线条更醒目marker突出了每个数据点。grid()添加了虚线网格提高了可读性。4. 创建多图表对比分析在实际工作中我们经常需要比较不同年份或不同产品的数据。Matplotlib可以轻松创建子图来实现这个需求。假设我们现在有2022年和2023年的销售数据sales_2022 [100, 120, 150, 110, 180, 200, 250, 230, 270, 300, 350, 400] sales_2023 [120, 150, 180, 135, 210, 250, 300, 280, 320, 350, 420, 500]我们可以这样绘制对比图fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 5)) # 2022年图表 ax1.plot(months, sales_2022, colorgreen) ax1.set_title(2022年销售额) ax1.set_ylabel(销售额(万元)) ax1.grid(True) # 2023年图表 ax2.plot(months, sales_2023, colorblue) ax2.set_title(2023年销售额) ax2.grid(True) plt.tight_layout() plt.show()subplots()函数创建了一个包含两个子图的画布。通过ax1和ax2我们可以分别控制每个子图的属性。这种对比方式能清晰展示年度增长情况。5. 制作专业的柱状图和饼图除了折线图柱状图和饼图也是常用的图表类型。让我们看看如何用Matplotlib创建它们。5.1 产品类别销售柱状图假设我们有以下产品类别的季度销售数据categories [电子产品, 家居用品, 服装, 食品] q1_sales [120, 85, 90, 110] q2_sales [150, 70, 100, 95]绘制分组柱状图的代码如下import numpy as np x np.arange(len(categories)) # 类别位置 width 0.35 # 柱状图宽度 fig, ax plt.subplots(figsize(10, 6)) rects1 ax.bar(x - width/2, q1_sales, width, label第一季度) rects2 ax.bar(x width/2, q2_sales, width, label第二季度) # 添加标签和标题 ax.set_ylabel(销售额(万元)) ax.set_title(产品类别季度销售对比) ax.set_xticks(x) ax.set_xticklabels(categories) ax.legend() # 自动添加数据标签 def autolabel(rects): for rect in rects: height rect.get_height() ax.annotate(f{height}, xy(rect.get_x() rect.get_width() / 2, height), xytext(0, 3), # 3点垂直偏移 textcoordsoffset points, hacenter, vabottom) autolabel(rects1) autolabel(rects2) plt.tight_layout() plt.show()这段代码创建了一个专业的对比柱状图清晰地展示了不同产品类别在两个季度的销售情况。autolabel函数自动在每个柱子上方添加了具体数值使图表更加直观。5.2 市场份额饼图饼图适合展示比例关系。假设我们要展示公司各产品线的市场份额product_lines [智能手机, 笔记本电脑, 平板电脑, 智能手表] market_share [45, 30, 15, 10] colors [#ff9999,#66b3ff,#99ff99,#ffcc99] plt.figure(figsize(8, 8)) plt.pie(market_share, labelsproduct_lines, colorscolors, autopct%1.1f%%, # 显示百分比 startangle90, # 起始角度 explode(0.1, 0, 0, 0)) # 突出显示第一块 # 添加标题 plt.title(产品线市场份额, fontsize16) # 确保饼图是正圆 plt.axis(equal) plt.show()这段代码生成的饼图不仅美观而且通过explode参数突出了智能手机这一主要产品线。autopct参数自动计算并显示了每个部分的百分比。6. 高级技巧自定义样式和保存图表6.1 使用样式表Matplotlib提供了多种内置样式可以一键改变图表外观print(plt.style.available) # 查看可用样式 plt.style.use(ggplot) # 使用ggplot样式 # 重新绘制之前的折线图 plt.figure(figsize(10, 6)) plt.plot(months, sales_2023, markero) plt.title(2023年销售额(ggplot样式)) plt.xlabel(月份) plt.ylabel(销售额(万元)) plt.grid(True) plt.show()ggplot样式模仿了R语言中著名的ggplot2库的风格让你的图表瞬间变得高大上。其他常用样式还有seaborn、fivethirtyeight等。6.2 保存高质量图表在完成图表制作后你可能需要将其保存为图片用于报告或演示plt.figure(figsize(10, 6)) plt.plot(months, sales_2023, markero) plt.title(2023年销售额) plt.xlabel(月份) plt.ylabel(销售额(万元)) # 保存为PNG(默认格式) plt.savefig(sales_2023.png, dpi300, bbox_inchestight) # 保存为PDF(矢量图无限放大不失真) plt.savefig(sales_2023.pdf, bbox_inchestight)dpi参数控制图片分辨率bbox_inchestight可以自动裁剪多余的空白边缘。PDF格式是矢量图适合印刷和高质量展示。7. 实战完整的销售数据分析报告让我们综合运用所学知识创建一个完整的销售数据分析可视化报告# 准备数据 months [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] sales_2022 [100, 120, 150, 110, 180, 200, 250, 230, 270, 300, 350, 400] sales_2023 [120, 150, 180, 135, 210, 250, 300, 280, 320, 350, 420, 500] categories [电子产品, 家居用品, 服装, 食品] q_sales { Q1: [120, 85, 90, 110], Q2: [150, 70, 100, 95], Q3: [180, 75, 110, 105], Q4: [200, 80, 120, 115] } # 创建画布 plt.figure(figsize(15, 10)) # 1. 年度对比折线图 plt.subplot(2, 2, 1) plt.plot(months, sales_2022, label2022年, markero) plt.plot(months, sales_2023, label2023年, markers) plt.title(年度销售额对比) plt.ylabel(销售额(万元)) plt.grid(True, linestyle--, alpha0.7) plt.legend() plt.xticks(rotation45) # 2. 2023年增长率 growth_rate [(s2023-s2022)/s2022*100 for s2022, s2023 in zip(sales_2022, sales_2023)] plt.subplot(2, 2, 2) plt.bar(months, growth_rate, colororange) plt.title(2023年月度增长率(%)) plt.grid(True, axisy, linestyle--, alpha0.7) plt.xticks(rotation45) # 3. 季度销售柱状图 plt.subplot(2, 2, 3) x np.arange(len(categories)) width 0.2 for i, (quarter, sales) in enumerate(q_sales.items()): plt.bar(x i*width, sales, width, labelquarter) plt.setp(plt.gca(), xticksx width*1.5, xticklabelscategories) plt.title(各产品类别季度销售) plt.ylabel(销售额(万元)) plt.legend() # 4. 2023年销售构成饼图 plt.subplot(2, 2, 4) total_2023 sum(sales_2023) q_sales_sum [sum(q) for q in zip(*q_sales.values())] plt.pie(q_sales_sum, labelscategories, autopct%1.1f%%) plt.title(2023年销售构成) plt.tight_layout() plt.savefig(sales_report.png, dpi300) plt.show()这个报告包含了四种不同类型的图表清晰地展示了销售数据的多个维度。通过subplot()函数我们将它们整齐地排列在一个画布上非常适合在商业报告中使用。

相关新闻

ATX电源电路设计与故障排查全解析

ATX电源电路设计与故障排查全解析

2026/9/26 0:22:45

1. ATX电源基础认知:从机箱供电到电路解析 作为一名硬件工程师,我拆解过上百款不同规格的ATX电源。这种看似普通的铁盒子,内部却藏着精密的电力转换系统。ATX电源规范自1995年由Intel提出后,至今仍是PC主机的标准供电方案。其核心…

数字IC实践项目(5)—基于PULPino的RISC-V SoC低功耗设计与验证(开源项目)

数字IC实践项目(5)—基于PULPino的RISC-V SoC低功耗设计与验证(开源项目)

2026/8/23 0:16:10

1. PULPino项目概述 PULPino是苏黎世联邦理工学院开发的开源RISC-V微控制器平台,专为嵌入式系统和物联网应用设计。这个项目最吸引我的地方在于它完整呈现了从处理器核到外设接口的SoC设计全貌,而且所有代码和文档都开放获取。我去年在做一个智能家居控制…

20分钟超长音频分析:Music Flamingo Think-2601-HF突破音乐理解上下文限制

20分钟超长音频分析:Music Flamingo Think-2601-HF突破音乐理解上下文限制

2026/8/23 0:16:11

20分钟超长音频分析:Music Flamingo Think-2601-HF突破音乐理解上下文限制 【免费下载链接】music-flamingo-think-2601-hf 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/music-flamingo-think-2601-hf 在音乐AI领域,NVIDIA的Music Flam…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…