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

news2025/7/10 19:33:34

目录

  • 引言
  • 一、什么是 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', bbox_inches='tight')

# 显示图形
plt.show()

代码详解:

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

  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.coloradmin.cn/o/2264349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录|动态规划背包问题】

一、背包问题分类 01背包:n种物品,每种物品只有一个 完全背包:n种物品,每种物品有无限个 多重背包:n种物品,每种物品的个数各不相同 二、01背包问题三道题 卡码网46题.携带研究材料(二维背包…

第1章 命题逻辑

2024年12月22日 一稿 1.1 现代逻辑学的基本研究方法 1.2 命题及其表示法 1.2.1 命题的概念 定义1.1 命题是一个可以判断真假的陈述句。 1.2.2 联结词 非 与 或 蕴含 等价 1.3 命题公式与语句形式化 1.3.1 命题公式的定义 1.3.2 公式的层次 1.3.3 语句形式化 1…

Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表

短短几百行代码,好吧,又是“参考”了国外的月亮 操作,还真地挺自然的。。。。。。国外的实现有点小牛 拖拉,增加+ 一个Element 鼠标左键长按,可以出提示 鼠标右键,清除Element, 有点小bug,不是很自然地完全清除, using System.Collections; using System.Collecti…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…

重拾设计模式--外观模式

文章目录 外观模式(Facade Pattern)概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式(Facade Pattern)概述 定义 外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一…

jvm栈帧结构

JVM(Java虚拟机)中的虚拟机栈是线程私有的,用于支持Java虚拟机进行方法调用和方法执行。而栈帧(Stack Frame)则是虚拟机栈的基本元素,每一个方法从调用开始至执行结束的整个过程,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。栈帧的内部结构主要包括以下几个部分:…

2009 ~ 2019 年 408【计算机网络】大题解析

2009 年 路由算法(9’) 讲解视频推荐:【BOK408真题讲解-2009年(催更就退网版)】 某网络拓扑如下图所示,路由器 R1 通过接口 E1 、E2 分别连接局域网 1 、局域网 2 ,通过接口 L0 连接路由器 R2 &…

Flamingo论文介绍:把视觉特征向语言模型看齐

今天介绍一篇经典的多模态论文,来自NeurIPS 2022的《Flamingo: a Visual Language Model for Few-Shot Learning》 ,论文地址:https://arxiv.org/pdf/2103.00020 文章目录 一、Motivate二、Method三、模块细节:Perceiver Resampl…

【VSCode】常用插件汇总

1 Path Autocomplete(路径提示的插件) 步骤一:在vscode的扩展搜索中直接搜索Path Autocomplete,直接安装 步骤二:配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…

STM32F103 | Embedded IDE03 - 使用OpenOCD在STM32F103项目时出现下载固件失败

导言 在上一篇备忘录介绍使用OpenOCD的stlink-v2.cfg接口下载固件,在STM32F407的项目上很顺利。但是,在stm32f103上会出现下载失败。 在网上搜了一下,这位博主的文章解决了这个问题: https://www.iotword.com/26738.html 一、修改stm32f1x.c…

易语言 OCR 文字识别

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…

Linux 网络维护相关命令简介

目录 零. 概要一. ping二. ip命令2.1 ip address2.2 ip route2.3 ip neighbour 三. traceroute四. DNS查询4.1 nslookup4.2 dig 五. ss 查看网络连接状态 零. 概要 ⏹在Linux系统中有2套用于网络管理的工具集 net-tools 早期网络管理的主要工具集,缺乏对 IPv6、网…

vscode中同时运行两个python文件(不用安装插件)

如何在vscode中同时运行两个python文件呢?今天在工作中遇到了这个问题。 查了网上的方法是安装coder runner插件,后来发现自身就有这个功能。所以记录一下,方便后续查找: 这是我的第一个文件,点击右上角的运行旁边的小箭头,有一…

matlab绘图时设置左、右坐标轴为不同颜色

目录 一、需求描述 二、实现方法 一、需求描述 当图中存在两条曲线,需要对两条曲线进行分别描述时,应设置左、右坐标轴为不同颜色,并设置刻度线,且坐标轴颜色需要和曲线颜色相同。 二、实现方法 2.1、实现目标: 1…

解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题

配置一下apache里面的配置文件:httpd.conf 和 httpd.vhosts.conf httpd.conf httpd-vhosts.conf 重启服务 展示: 浏览器中中文乱码问题:

RunCam WiFiLink连接手机图传测试

RunCam WiFiLink中文手册从这里下载 一、摄像头端 1.连接天线(易忘) 2.打开摄像头前面的盖子(易忘) 3.接上直流电源,红线为正,黑线为负 4.直流电源设置电压为14v,电流为3.15A, 通…

用JAVA做了一个登录窗体练习

目 录 说明运行后的效果代码 说明 做了一个登录窗体作为练习,分享给大家,其中涉及到窗体、图板、随机数等内容,为了方便和我一样的小白可以看的比较明白,所以尽量详细的标注了注释,希望能帮到同样在学习路上的朋友 运…

《开启微服务之旅:Spring Boot 从入门到实践》(一)

Spring Boot Spring Boot 入门 Spring Boot 简介(脚手架) 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 优点:快速创建独立运行的spring项目以及与主流…

springboot466大学生就业服务平台(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统大学生就业服务平台信息管理难度大,容错率低&…

ROS1入门教程2:主题发布和订阅

一、创建发布者 创建源文件publisher.cpp&#xff0c;并写入以下内容&#xff1a; #include <iostream>#include "ros/ros.h" #include "std_msgs/String.h"int main(int argc, char* argv[]) {std::string nodeName "publisher"; // 节…