Matplotlib基础绘图实战指南

发布时间:2026/7/15 18:09:15

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/7/15 18:09:15

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

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

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

2026/7/15 18:09:15

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

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

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

2026/7/15 18:09:15

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…

AI 编程落地实战:Codex 如何真正成为你的 “开发副驾驶”?

AI 编程落地实战:Codex 如何真正成为你的 “开发副驾驶”?

2026/7/15 19:29:19

最近一段时间,我几乎把所有重复性编码工作都交给了 Codex。从前端组件、接口请求,到后端工具函数、Shell 脚本,它都能稳定产出质量不错的代码。但说实话,真正用好 Codex,并不是无脑让它写代码,而是控制链路…

function calling 和 MCP 的关系 就相当于 rag 和 微调 的关系

function calling 和 MCP 的关系 就相当于 rag 和 微调 的关系

2026/7/15 19:29:19

MCP与Function Calling对比 MCP(Multi-Component Pipeline) MCP是一种模块化架构,将任务分解为多个独立的组件(如预处理、推理、后处理),通过流水线方式串联执行。适用于复杂任务,组件可独立优化…

Qt/C++源码/地图控件/实时动态轨迹/历史轨迹回放/航线规划/性能强悍

Qt/C++源码/地图控件/实时动态轨迹/历史轨迹回放/航线规划/性能强悍

2026/7/15 19:29:19

一、功能特点 支持各种地图源,包括天地图、高德地图、腾讯地图、谷歌地图、微软地图等。标准WGS-84地球坐标系,采用默卡托投影,可以拓展其他坐标系和投影规则。支持在线和离线两种场景需求,可以自定义在线瓦片地址格式和离线瓦片…

INT102 算法核心:从伪代码到时间复杂度实战解析

INT102 算法核心:从伪代码到时间复杂度实战解析

2026/7/15 19:29:19

1. 伪代码:算法设计的通用语言伪代码是算法设计中最重要的工具之一,它就像程序员之间的"普通话",能让我们摆脱具体编程语言的束缚,专注于算法逻辑本身。我第一次接触伪代码时,感觉它就像是在用英语写程序&am…

前端三基石:从后端视角理解 HTML、CSS 与 JavaScript

前端三基石:从后端视角理解 HTML、CSS 与 JavaScript

2026/7/15 19:29:19

目录前言一、基本概念二、运行环境和机制三、HTML:网页的“骨架”,承载所有内容3.1 HTML 基本结构2.2 最常用的 HTML 标签2.3 HTML 核心基础概念三、CSS:网页的“皮肤”,美化与布局3.1 CSS 核心:如何定位HTML元素&…

Markn:终极轻量级Markdown实时预览工具,让文档创作更高效

Markn:终极轻量级Markdown实时预览工具,让文档创作更高效

2026/7/15 19:19:18

Markn:终极轻量级Markdown实时预览工具,让文档创作更高效 【免费下载链接】markn Lightweight markdown viewer. 项目地址: https://gitcode.com/gh_mirrors/ma/markn Markn是一款专为开发者和内容创作者设计的轻量级Markdown查看器,它…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/14 10:03:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

【LINUX】驱动

【LINUX】驱动

2026/7/15 0:08:14

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…