【Python】【数据分析】深入探索 Python 数据可视化:Matplotlib 绘图库完整教程

目录

  • 引言
  • 一、什么是 Matplotlib?
    • 1.1 Matplotlib 的安装
    • 1.2 Matplotlib 的基本功能
  • 二、Matplotlib 的基础绘图
    • 2.1 绘制折线图
    • 2.2 绘制柱状图
    • 2.3 绘制散点图
    • 2.4 绘制饼图
  • 三、高级功能与定制
    • 3.1 设置图表样式
    • 3.2 使用子图
    • 3.3 保存图表
  • 四、Matplotlib 流程图
    • 4.1 Mermaid 流程图
    • 4.2 中文显示与负号问题
  • 总结
  • 参考文献

引言

在数据分析与机器学习的过程中,数据可视化是一个至关重要的环节。它不仅能够帮助我们清晰地理解数据的分布和趋势,还能在结果呈现时增强表达力和说服力。在众多 Python 数据可视化工具中,Matplotlib 作为最流行且功能强大的绘图库之一,被广泛应用于静态、动态及交互式图表的绘制。

本篇文章将从 Matplotlib 的基础知识开始,逐步深入探讨如何用其绘制各种图表,包括折线图、柱状图、散点图、饼图等常见图形,并介绍如何定制图表、添加样式以及多子图的使用方法。最后,我们还将通过 Mermaid 流程图来展示 Matplotlib 的使用流程,帮助大家更好地理解整个操作流程。

一、什么是 Matplotlib?

Matplotlib 是一个 2D 绘图库,它提供了一种非常简单而强大的方式来创建静态图、动态图以及交互式图。其广泛应用于数据分析、机器学习、科研研究等领域,尤其是在数据科学的可视化环节,它几乎是每个数据科学家都必备的工具。

1.1 Matplotlib 的安装

安装 Matplotlib 非常简单,可以通过 Python 的包管理工具 pip 来完成。打开命令行,执行以下命令即可:

pip install matplotlib

如果你已经安装了 Matplotlib,可以使用以下命令来更新到最新版本:

pip install --upgrade matplotlib

安装完成后,我们可以通过以下方式在代码中导入 Matplotlib:

import matplotlib.pyplot as plt

plt 是 Matplotlib 库中 pyplot 模块的常用别名,几乎所有的绘图命令都可以通过 plt 来调用。

1.2 Matplotlib 的基本功能

Matplotlib 提供了多种绘图功能,最常用的就是 pyplot 模块,它封装了多种常见的绘图命令,能帮助我们快速绘制各种图表。

二、Matplotlib 的基础绘图

Matplotlib 提供了多种绘图方式,其中最常见的是使用 pyplot 模块来绘制图形。接下来,我们将通过一些常见的图表类型来介绍 Matplotlib 的基本使用方法。

2.1 绘制折线图

折线图是数据可视化中最常见的图表类型之一,特别适用于展示随时间变化的数据,通常用于展示数据随时间的变化趋势或其他变量的关系。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]# 绘制折线图
plt.plot(x, y, label='y = x^2', color='blue', marker='o')# 添加标题和标签
plt.title('折线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')# 显示图例
plt.legend()# 显示图形
plt.show()

代码详解:

  1. 数据定义xy 是表示坐标的列表,x 表示横坐标,y 表示纵坐标。
  2. 绘图命令plt.plot(x, y) 用于绘制折线图。可以通过 color 设置线条颜色,通过 marker 设置数据点的样式。
  3. 添加图表元素plt.title() 用于添加图表的标题,plt.xlabel()plt.ylabel() 用于添加 x 轴和 y 轴标签,plt.legend() 用于显示图例。

输出效果:
生成一个显示数据点 (x, y) 的折线图,其中 y 值是 x 的平方。

在这里插入图片描述

2.2 绘制柱状图

柱状图用于展示各个类别数据的比较,适合对比不同类别的数据。它常用于分类数据的可视化,能够清晰地显示不同类别的大小。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据
labels = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]# 绘制柱状图
plt.bar(labels, values, color='skyblue')# 添加标题和标签
plt.title('柱状图示例')
plt.xlabel('类别')
plt.ylabel('值')# 显示图形
plt.show()

代码详解:

  1. 数据定义labels 表示类别名称,values 是每个类别的值。
  2. 绘图命令plt.bar() 用于绘制柱状图,color 设置柱子的颜色。
  3. 添加图表元素:与折线图类似,通过 plt.title()plt.xlabel()plt.ylabel() 来添加标题和轴标签。

输出效果:
生成一个简单的柱状图,显示四个类别的值,柱子的高度代表它们的大小。
在这里插入图片描述

2.3 绘制散点图

散点图用于展示两个变量之间的关系,尤其适合于观察数据的分布和趋势。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]# 绘制散点图
plt.scatter(x, y, color='red')# 添加标题和标签
plt.title('散点图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')# 显示图形
plt.show()

代码详解:

  1. 数据定义xy 分别表示横轴和纵轴的数据。
  2. 绘图命令plt.scatter() 用于绘制散点图,color 设置点的颜色。

输出效果:
展示了一组 (x, y) 数据点,便于我们观察数据的分布趋势。
在这里插入图片描述

2.4 绘制饼图

饼图通常用于展示各个部分占总体的比例,适合用于可视化百分比数据,常用于市场份额、投票结果等方面的展示。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据
labels = ['Python', 'Java', 'C++', 'JavaScript']
sizes = [40, 30, 20, 10]# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)# 添加标题
plt.title('语言使用比例')# 显示图形
plt.show()

代码详解:

  1. 数据定义labels 是类别标签,sizes 是各个类别的比例。
  2. 绘图命令plt.pie() 用于绘制饼图,autopct 控制显示百分比,startangle 控制起始角度。

输出效果:
展示了不同编程语言使用比例的饼图。
在这里插入图片描述

三、高级功能与定制

3.1 设置图表样式

Matplotlib 提供了多种内置样式,可以通过 plt.style.use() 来改变图表的外观。

import matplotlib.pyplot as plt
from matplotlib import rcParams
import random# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 打印可用的样式
print("Available styles:", plt.style.available)# 随机选择一个样式
random_style = random.choice(plt.style.available)# 使用随机选择的样式
plt.style.use(random_style)# 绘制数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]plt.plot(x, y)
plt.title('折线图示例')
plt.show()

代码详解:

  1. 设置样式:通过 plt.style.use() 可以切换到多种内置样式,如 seaborn-darkgridggplot 等,这样可以快速获得美观的图表外观。例如,使用 seaborn-darkgrid 可以为图表添加背景网格和柔和的配色,使图形更加清晰易读。

  2. 查看可用样式:使用 plt.style.available 可以列出当前环境下所有可用的样式名称。这样你可以选择最适合的样式,以满足不同的展示需求。

  3. 随机选择样式:可以通过 random.choice(plt.style.available) 随机从所有可用样式中选择一个,这对于在不同情境下快速测试不同风格的图表非常有用。

  4. 应用样式:选择并应用样式后,所有后续绘图操作都会继承该样式的设置,比如颜色、线条、网格等,极大提高了绘图效率。

输出效果:
这将使图表采用随机内置的风格,提高可视化效果。
在这里插入图片描述

3.2 使用子图

当需要在一个窗口中展示多个图表时,plt.subplots() 是非常有用的函数。它可以创建多个子图并将其组织成一个网格。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 创建 1 行 2 列的子图
fig, axs = plt.subplots(1, 2)# 第一个子图:折线图
axs[0].plot([1, 2, 3], [1, 4, 9])
axs[0].set_title('折线图')# 第二个子图:柱状图
axs[1].bar(['A', 'B', 'C'], [10, 20, 15])
axs[1].set_title('柱状图')# 设置主图标题
fig.suptitle('子图示例', fontsize=16)# 自动调整子图布局,使得标题和内容不重叠
fig.tight_layout(rect=[0, 0, 1, 0.96])  # 通过调整 rect 参数给主标题留出空间# 显示图形
plt.show()

代码详解:

  1. 创建子图plt.subplots(1, 2) 创建了一个 1 行 2 列的子图,每个子图可以单独绘制。fig 是主图对象(figure),axs 是一个包含两个子图(axes)的数组。
  2. 访问子图:通过 axs[0]axs[1] 分别访问两个子图。
  3. 设置标题axs[0].set_title('折线图')axs[1].set_title('柱状图') 为每个子图设置标题,分别为“折线图”和“柱状图”。
  4. 设置主图标题fig.suptitle('子图示例', fontsize=16) 设置整个图表的主标题“子图示例”,并指定字体大小为 16。
  5. 调整子图布局fig.tight_layout(rect=[0, 0, 1, 0.96]) 使用 tight_layout() 自动调整子图的位置和大小,以防止子图标题与内容重叠。rect=[0, 0, 1, 0.96] 指定了一个边距区域,确保主标题不会与子图的内容重叠。

输出效果:
生成一个表示不同编程语言使用比例的饼图,每个部分的比例以百分比形式标注,直观显示各语言的使用份额。在这里插入图片描述

3.3 保存图表

绘制完成后,可以通过 plt.savefig() 将图表保存为文件,以便后续使用或分享。

import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]# 绘制折线图
plt.plot(x, y, label='y = x^2')# 添加标题和标签
plt.title('折线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')# 保存图表为PNG文件
plt.savefig('line_chart.png')# 显示图形
plt.show()

代码详解:

  1. 保存图表plt.savefig('line_chart.png') 用于将当前图表保存为图像文件。可以选择保存为 .png.jpg.svg 等格式。savefig 函数支持各种额外的参数,如设置 DPI(分辨率)、透明背景等。

  2. 显示图形plt.show() 继续展示图形,确保图表在屏幕上显示。

输出效果:
保存后的图表文件可以在项目中直接引用或在报告中使用。
在这里插入图片描述

四、Matplotlib 流程图

为了帮助大家更好地理解如何在代码中一步一步地绘制 Matplotlib 图表,本文使用流程图来可视化整个绘制过程,流程图能够直观地展示复杂的步骤和流程。

4.1 Mermaid 流程图

折线图
柱状图
散点图
CSDN @ 2136
开始
准备数据
选择图表类型
plt.plot
plt.bar
plt.scatter
自定义图表属性
显示图表
保存图表
结束
CSDN @ 2136

在上面的流程图中,我们展示了绘制一个 Matplotlib 图表的完整过程。这个流程图展示了使用 Matplotlib 绘制图表的基本步骤,包括选择图表类型、添加标签、显示和保存图表。通过这个流程图,用户可以更加清晰地理解如何使用 Matplotlib 来完成数据可视化。

图表的绘制流程分为以下几个步骤:

  1. 开始:启动绘制过程。
  2. 准备数据:准备绘制所需的数据,可能是从文件、数据库、或手动输入的数据。
  3. 选择图表类型:根据需求选择适当的图表类型,如折线图、柱状图、散点图等。
  4. 使用 Matplotlib 绘图:根据选择的图表类型,调用相应的 Matplotlib 函数(如 plt.plot()plt.bar()plt.scatter(),绘制数据的图形。
  5. 自定义图表属性:对图表进行样式、标签、标题、坐标轴等的定制。
  6. 显示图表:在屏幕上显示图表,通常用 plt.show()
  7. 保存图表:通过 plt.savefig() 保存图表为文件。
  8. 结束:绘图流程完成。

4.2 中文显示与负号问题

在进行数据可视化时,常常会遇到中文显示不正常或者负号显示为乱码的问题。为了确保 Matplotlib 绘制的图表能够正确显示中文并解决负号显示问题,我们可以通过 rcParams 配置 Matplotlib 的字体设置。

代码示例:

from matplotlib import rcParams# 设置中文字体
rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 你可以根据系统中安装的字体修改为合适的中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

解释:

  1. 设置中文字体rcParams['font.sans-serif'] = ['Microsoft YaHei'] 这一行代码指定了 Matplotlib 使用 Microsoft YaHei 字体来显示中文字符。你可以根据自己的操作系统,替换为其他的中文字体,如 SimHeiSTKaiti 等。这样可以确保在图表中显示中文时不会出现乱码。

  2. 解决负号显示问题rcParams['axes.unicode_minus'] = False 这一行代码解决了负号显示为乱码的问题。Matplotlib 默认情况下,负号可能会显示为其他字符,特别是在使用中文字体时,通过这行代码可以确保负号正确显示。

将上述设置添加到代码中后,你就可以在 Matplotlib 中顺利使用中文并避免负号显示错误。

总结

Matplotlib 是 Python 中最重要的可视化库之一,广泛应用于数据分析和机器学习领域。本文通过一系列简单的例子展示了 Matplotlib 的基本用法,涵盖了常见的折线图、柱状图、散点图、饼图等图表的绘制。通过调整图表的样式、添加图例、标题和标签等,可以极大提高图表的可读性和美观性。

进一步地,我们还展示了如何利用 Mermaid 流程图来直观地呈现绘图过程,帮助用户快速理解整个流程,并加深对 Matplotlib 的掌握。

如果你是数据分析初学者,掌握 Matplotlib 是你进入数据可视化世界的重要一步。通过不断地练习和深入探索,你将能够创建出更加精美和富有表现力的图表。

参考文献

  • Matplotlib 官方文档

  • Mermaid 官方文档

  • Matplotlib 学习教程 - CSDN

通过上述内容,你已经了解了如何使用 Matplotlib 进行数据可视化的基本操作,并且掌握了如何优化图表及可视化过程。希望这篇文章能帮助你更好地掌握数据可视化的技巧,提升数据分析的能力!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/490996.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3-机器人视觉-机器人抓取与操作

文章目录 3机器人视觉目录 1. 传感器和标定摄像头模型Intrinsic MatrixExtrinsic Matrix 标定内参标定手眼标定和外参标定 力传感器&其它传感器其它传感器 2. 神经网络和图像处理2D特征处理常见架构 训练流程推理流程部署流程2D 图像任务3D Point Cloud FeaturePointNet Ap…

从源码层级深入探索 Spring AMQP 如何在 Spring Boot 中实现 RabbitMQ 集成——消费者如何进行消费

本章节主要从底层源码探索Spring Boot中RabbitMQ如何进行消费,至于RabbitMQ是如何使用如何生产消息,本章不做过多介绍,感兴趣的小伙伴可以参考:从源码层级深入探索 Spring AMQP 如何在 Spring Boot 中实现 RabbitMQ 集成——生产者…

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改,增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…

【小白51单片机专用教程】protues仿真AT89C51入门

课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者:羿莉 背景 对企业数据进行敏感数据扫描和保护可以提升企业或组织的数据安全。一方面敏感数据可能包括个人身份信息、财务记录、医疗记录等,定期扫描这些数据可以防止未经授权的访问和泄露。 另一方面,许多国家和地区都有关于数据保护的…

Redis和数据库的一致性(Canal+MQ)

想要保证缓存与数据库的双写一致,一共有4种方式,即4种同步策略: 先更新缓存,再更新数据库;先更新数据库,再更新缓存;先删除缓存,再更新数据库;先更新数据库,再…

spring学习(spring-bean实例化(无参构造与有参构造方法实现)详解)

目录 一、spring容器之bean的实例化。 (1)"bean"基本概念。 (2)spring-bean实例化的几种方式。 二、spring容器使用"构造方法"的方式实例化bean。 (1)无参构造方法实例化bean。 &#…

Qt WORD/PDF(二)使用 QtPdfium库实现 PDF操作、打印等

关于QT Widget 其它文章请点击这里: QT Widget GitHub 源码: QWidgetLearningPro (暂未更新) 姊妹篇: Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览 一、简介 QtPdfium 是基于Pdfium库的一个Qt绑定。Pdfium是一个…

【Leecode】Leecode刷题之路第82天之删除排序链表中的重复元素II

题目出处 82-删除排序链表中的重复元素 II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 82-删除排序链表中的重复元素 II-官方解法 方法1:一次遍历 思路: 代码…

IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁

模拟环境 dev 分支开发完一个功能,需要合并到 master 分支,如果现在直接 merge 合并的话 git分支树会出现杂乱分叉,先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定,…

短信验证码burp姿势

首先声明,本文仅仅作为学习使用,因个人原因导致的后果,皆有个人承担,本人没有任何责任。 在之前的burp学习中,我们学习了图片验证码的突破,但是现实中还有很多短信验证码,在此我介绍几种短信验…

你知道OSI参考模型是什么吗?

你知道OSI参考模型是什么吗? 一. OSI模型图解二. OSI七层模型三. OSI模型的特点四. OSI模型与TCP/IP模型的对比五. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱…

好用便签好用在哪里?

在这个信息如潮水般涌来,生活节奏快得像开了倍速的时代,我们的大脑常常被各种事务塞得满满当当,仿佛一台即将 “死机” 的电脑。这时候,我希望有一些工具能帮我轻松梳理这团乱麻,让一切变得井井有条。 从时间管理的维度…

Codeforces Round 993 (Div. 4)

Codeforces Round 993 (Div. 4) 2024.12.15 rank289 123:1381->1504 A Cube is given an integer n n n. She wants to know how many ordered pairs of positive integers ( a , b ) (a,b) (a,b) there are such that a n − b an-b an−b. Since Cube is…

Linux中的service命令

service命令 在Linux系统中,service命令是用来启动、停止、重启以及查看系统服务状态的一个常用命令。服务,或称为守护进程,是在后台运行的进程,它们通常会监听某个端口,等待其他程序的请求。例如,MySQL、…

R环境配置 以及Debug方法 (VSCode, conda, 远程R)

生物信息学中的R环境配置 以及Debug方法 开始设置1、建议使用VSCode conda 远程R2、 VSCode配置安装插件安装好插件后,远程设置链接成功后,设置项目 3、 linux conda 和 远程R配置4、VScode 远程访问R环境下面配置远程R 5、开始Debug新建个R文件&#…

druid图形化监控 + MyBatis优化器使用

文章目录 1.集成druid图形化监控1.配置application.yml2.测试访问 http://localhost:项目端口/druid 2.MyBatis优化器(显示完整sql)1.目录2.SqlBeautyInterceptor.java:sql拦截器3.MybatisConfiguration.java:将sql拦截器注入容器4.测试5.MyBatis优化器动…

【经验分享】私有云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

Unity 2020、2021、2022、2023、6000下载安装

Unity 2020、2021、2022、2023、6000 下载安装 以Unity 6000.0.24fc1下载安装为例: 打开 https://unity.cn/ 优三缔 官方网站; 点击【产品列表】→点击【查看更多】→选择自己需要的版本→点【开始使用】 点击【从Unity Hub下载】 以Windows为例&am…

240004】基于maven的java+ssm+mysql的房屋租赁系统的设计与实现

基于ssmmavenmysql的房屋租赁系统的设计与实现 1.项目描述2.运行环境3.项目截图4.源码获取 1.项目描述 该项目在原有的基础上进行了优化,包括新增了注册功能,房屋模糊查询功能,管理员和用户信息管理等功能,以及对网站界面进行了优…