Python 中使用 Matplotlib 进行多图绘制

news/2024/12/28 20:55:50/文章来源:https://www.cnblogs.com/chenshifu666/p/18637943

Python 中使用 Matplotlib 进行多图绘制

Matplotlib 是 Python 中非常强大的数据可视化工具,它可以用来生成简单到复杂的各种图形。无论是处理单张图表还是多图并列展示,Matplotlib 都能提供高效的支持。在本篇文章中,我们将介绍如何使用 Matplotlib 绘制多图,以便在同一画布上展示多种数据分析结果。

在这里插入图片描述

1. Matplotlib 简介

Matplotlib 是一个数据可视化库,它可以生成条形图、折线图、散点图等多种类型的图表。在数据分析中,我们经常会遇到需要将多个数据集或不同维度的数据放在同一图表中展示的情况,Matplotlib 的多图绘制功能正是为此而设计的。

安装 Matplotlib

如果还没有安装 Matplotlib,可以通过以下命令安装:

pip install matplotlib

2. 使用 Matplotlib 进行多图绘制的基本方法

Matplotlib 提供了两种多图绘制的基本方法:

  • subplot:可以在同一图表中创建多个小图。
  • figureaxes:这种方法使用 subplots() 函数生成一个图形对象和多个坐标轴对象,从而在画布上绘制多个图形。

示例数据

在接下来的示例中,我们将使用一些简单的数据进行展示,方便理解多图绘制的过程。

import matplotlib.pyplot as plt
import numpy as np# 示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.log(x + 1)

3. 使用 subplot() 创建多图

subplot() 是 Matplotlib 中最基础的多图绘制方法,可以在同一个窗口中排列多个子图。subplot() 的调用方式如下:

plt.subplot(n_rows, n_cols, index)
  • n_rows:图表的行数。
  • n_cols:图表的列数。
  • index:子图的位置,从 1 开始。

示例 1:创建一个 2x2 的多图布局

在下面的示例中,我们创建一个包含 4 个图的 2x2 布局,每个图显示不同的函数曲线。

plt.figure(figsize=(10, 8))# 第一张图
plt.subplot(2, 2, 1)
plt.plot(x, y1, color='blue')
plt.title('Sine Function')# 第二张图
plt.subplot(2, 2, 2)
plt.plot(x, y2, color='green')
plt.title('Cosine Function')# 第三张图
plt.subplot(2, 2, 3)
plt.plot(x, y3, color='red')
plt.title('Tangent Function')# 第四张图
plt.subplot(2, 2, 4)
plt.plot(x, y4, color='purple')
plt.title('Logarithmic Function')plt.tight_layout()  # 调整布局
plt.show()

在这个例子中,plt.figure() 用于创建一个新的图形,subplot() 函数依次在不同位置绘制各个函数曲线。tight_layout() 函数用于自动调整子图之间的间距,确保图表不会重叠。

示例 2:非对称布局的子图

如果我们不想按照整齐的行列来布局,可以通过不同的 subplot 配置实现。例如,我们可以创建一个包含 1 行 2 列的上部分图,再加上一个占据整个下方的图。

plt.figure(figsize=(10, 8))# 上部的左侧子图
plt.subplot(2, 2, 1)
plt.plot(x, y1, 'b-')
plt.title('Sine Function')# 上部的右侧子图
plt.subplot(2, 2, 2)
plt.plot(x, y2, 'g-')
plt.title('Cosine Function')# 占据整个下部的子图
plt.subplot(2, 1, 2)
plt.plot(x, y3, 'r-')
plt.title('Tangent Function')plt.tight_layout()
plt.show()

通过调整 subplot 的行数、列数和索引值,我们可以自定义图表的布局方式。

4. 使用 subplots() 创建多图

subplots() 函数是一种更为灵活的方法。它可以同时返回一个包含所有子图的 figure 对象和一个 axes 数组,便于对每个子图进行单独操作。

示例 3:使用 subplots() 创建 2x2 的多图布局

fig, axs = plt.subplots(2, 2, figsize=(10, 8))# 绘制 Sine 函数
axs[0, 0].plot(x, y1, 'b')
axs[0, 0].set_title('Sine Function')# 绘制 Cosine 函数
axs[0, 1].plot(x, y2, 'g')
axs[0, 1].set_title('Cosine Function')# 绘制 Tangent 函数
axs[1, 0].plot(x, y3, 'r')
axs[1, 0].set_title('Tangent Function')# 绘制 Logarithmic 函数
axs[1, 1].plot(x, y4, 'purple')
axs[1, 1].set_title('Logarithmic Function')plt.tight_layout()
plt.show()

优势

subplots() 可以让我们更方便地控制每个子图,因为返回的 axes 数组使我们可以按索引直接操作特定子图。对于大型项目,或需要对每个子图有更多控制时,这种方法更具优势。

示例 4:共享 x 轴和 y 轴

在多图绘制中,通常希望多个图共享 x 轴或 y 轴,以便更清楚地对比不同数据集。可以在 subplots() 中使用 sharexsharey 参数来实现。

fig, axs = plt.subplots(2, 2, figsize=(10, 8), sharex=True, sharey=True)# 绘制不同的函数
axs[0, 0].plot(x, y1, 'b')
axs[0, 0].set_title('Sine Function')axs[0, 1].plot(x, y2, 'g')
axs[0, 1].set_title('Cosine Function')axs[1, 0].plot(x, y3, 'r')
axs[1, 0].set_title('Tangent Function')axs[1, 1].plot(x, y4, 'purple')
axs[1, 1].set_title('Logarithmic Function')plt.tight_layout()
plt.show()

此示例中,通过 sharex=Truesharey=True,我们可以共享所有子图的 x 轴和 y 轴范围。对于多图中具有相似范围的变量,这种设置可以简化图表,使其更易于解读。

5. 使用 GridSpec 进行灵活布局

如果想要更灵活地控制子图的布局,Matplotlib 提供了 GridSpec 模块,可以在同一个窗口中创建大小和形状不同的子图。

示例 5:使用 GridSpec 创建不规则布局

import matplotlib.gridspec as gridspecplt.figure(figsize=(10, 8))
gs = gridspec.GridSpec(3, 3)# 左上角图,占据 2x2
plt.subplot(gs[0:2, 0:2])
plt.plot(x, y1, 'b-')
plt.title('Large Sine Plot')# 右上角图
plt.subplot(gs[0, 2])
plt.plot(x, y2, 'g-')
plt.title('Small Cosine Plot')# 中右图
plt.subplot(gs[1, 2])
plt.plot(x, y3, 'r-')
plt.title('Small Tangent Plot')# 下方图,占据整个底部
plt.subplot(gs[2, :])
plt.plot(x, y4, 'purple')
plt.title('Logarithmic Plot')plt.tight_layout()
plt.show()

GridSpec 中,我们可以定义 3 行 3 列的网格,并将每个子图放置到不同的网格区域中,从而实现更加复杂的布局。

6. 调整多图的样式和布局

绘制多图时,通常需要调整图表的大小、子图之间的间距、标题等,以便优化显示效果。以下是一些常用的调整方法:

  • 调整画布大小:使用 figsize=(宽, 高) 控制画布的大小。
  • 自动调整布局plt.tight_layout() 可以自动调整子图之间的间距,防止标题或标签重叠。
  • 自定义子图间距:`plt.subplots_adjust(left, right, top

, bottom, wspace, hspace)` 手动调整子图之间的间距。

示例 6:调整多图间距和整体布局

fig, axs = plt.subplots(2, 2, figsize=(10, 8))# 添加每个子图内容
axs[0, 0].plot(x, y1, 'b')
axs[0, 1].plot(x, y2, 'g')
axs[1, 0].plot(x, y3, 'r')
axs[1, 1].plot(x, y4, 'purple')# 手动调整子图之间的间距
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1, wspace=0.3, hspace=0.4)
plt.show()

在多图绘制中,良好的布局和样式调整可以大大提高图表的可读性和美观性。

7. 总结

本文介绍了 Python 中 Matplotlib 的多图绘制功能。通过 subplotsubplots 可以轻松实现多图布局,并通过 GridSpec 进一步控制每个子图的大小和位置。对于数据分析中的多维度数据展示,掌握这些技巧可以帮助我们更好地理解数据关系,使分析结果更加直观。

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

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

相关文章

fping 的使用方法

fping简介 fping是一个小型命令行工具,用于向网络主机发送ICMP回应请求,类似于ping,但在ping多个主机时性能要高得多。 fping完全不同于ping,因为可以在命令行上定义任意数量的主机,或者指定包含要ping的IP地址或主机列表的文件。 与ping要等待某一主机连接超时或发回反馈…

.NET Bioss相关数据读写

本文我们介绍针对Bios如何读取、写入数据,比如最常见的SN读取以及烧录 WMI查询 先看看WMI方式,可以用于查询和管理Windows系统的各种信息,包括读取BIOS信息 WMI-Win32_BIOS,可以查看Bios版本、制造商以及Bios Sn等:1 var searcher = new ManagementObjectSear…

家居强电电路模拟程序总结

一、前言:这两次的PTA作业第一次是以前两次家居强电电路模拟程序为基础所扩展的,在上一次作业的基础上增加了一个新的互斥开关,互斥开关的电路符号为H,其12引脚之间电阻为5欧,13引脚之间电阻为10欧,还增加了一个新的受控窗帘,受控窗帘的电路符号为S,窗帘电阻为15欧,其…

Python 正则表达式进阶用法:字符集与字符范围详解

Python 正则表达式进阶用法:字符集与字符范围详解 正则表达式是文本处理和数据清洗中不可或缺的工具。在前面的学习中,我们已经了解了基本的正则表达式匹配,如匹配单个字符、字符串开始和结束的位置等。今天,我们将进入正则表达式的一个进阶主题:字符集(Character Set)和…

如何免费使用 Termius Pro 版?Termius 工具下载与破解教程

今天想和大家聊聊 Termius 工具,Termius的下载与Termius破解教程,一款跨平台的 SSH/SFTP 终端工具。它不仅功能强大,还特别适合需要频繁上传文件夹和进行远程管理的小伙伴。无论你是程序员、运维工程师,还是需要远程管理服务器的爱好者,这款工具都能成为你的得力助手!今天…

Python 正则表达式进阶用法:边界匹配

Python 正则表达式进阶用法:边界匹配 正则表达式是一种强大的工具,用于处理文本中的模式匹配。它广泛应用于文本查找、替换、数据清洗等任务。在学习了正则表达式的基础知识后,掌握更高级的用法将使得正则表达式的应用更加灵活。边界匹配(Boundary Matching)是正则表达式中…

java-BLOG3

一:前言知识点总结题目集7控制设备:引入了开关、分档调速器、连续调速器和互斥开关四种控制设备,重点在于理解这些设备的工作原理及其在电路中的作用。 受控设备:包括灯(白炽灯、日光灯)和风扇(吊扇、落地扇),以及新增的受控窗帘。主要考察学生对不同设备工作状态的理…

学习笔记 - 汉明码

汉明码属于一种具备纠错功能的线性分组码。 在数据传输时,受外界干扰影响,单个比特可能产生差错。汉明码借助添加的冗余监督位,依照特定规则精准判断出错比特位,进而完成纠正,确保信息恢复如初,宛如给数据披上一层“防护甲”,使其即便处于复杂环境,也能维持精准可靠,在…

学习笔记 - 摩斯电码

摩斯电码由美国人塞缪尔莫尔斯等人发明,仅用“”(点)与“-”(划)两种符号,按不同排列组合来代表英文字母、数字和标点。起初应用于有线电报,后应用到无线电通信,曾长期担任关键角色。如今,虽因通信技术革新而不再主流,但在业余无线电爱好者群体中依旧流行,紧急救援时…

2024第一届Solar杯应急响应挑战赛WP

对于一个只学了2个月的小白来说这种比赛难度还是太高了,还要沉淀一下QAQ 内存取证-1 题目描述 题目文件:SERVER-2008-20241220-162057 请找到rdp连接的跳板地址 flag格式 flag{1.1.1.1} 先imageinfo然后netscan F:\CTF软件合集\Misc杂项\隐写工具\取证类\volatility\Volatili…

App信息收集

引子:上一章主要介绍了信息收集中的Web信息收集,包括要收集什么信息、该怎样去做等内容。而本章则简单介绍一下当目标为App时该如何进行信息收集。由于本篇章为信息收集篇,因此很多内容笔者并没有深究(ps:其实是深究不明白),或许等一轮学完后再回头看时会明白很多吧。免…

基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)PSO优化过程: PSO优化前后,模型训练对比: 数据预测对比: 误差回归对比: 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)LR = g1(1); NN1 = floor(g1…