深入Matplotlib:画布分区与高级图形展示【第33篇—python:Matplotlib】

文章目录

  • Matplotlib画布分区技术详解
    • 引言
    • 方法一:plt.subplot()
    • 方法二:简略写法
    • 方法三:plt.subplots()
    • 实例展示
    • 添加更多元素
  • 进一步探索Matplotlib画布分区
    • 自定义子图布局
    • 3D子图
    • 结语

Matplotlib画布分区技术详解

引言

Matplotlib是一个强大的Python绘图库,通过其灵活的画布分区技术,用户可以在一个画布上创建多个子图,以更清晰地呈现数据图形。本文将深入介绍Matplotlib中的画布分区方法,并通过实例演示如何在子图中展示不同类型的数据。

方法一:plt.subplot()

首先,我们使用plt.subplot()方法来实现画布分区。以下是示例代码:

import matplotlib.pyplot as plt
import numpy as np# 将画布分为2行2列,将图画到画布的指定区域
x = np.linspace(1, 10, 100)plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x))plt.subplot(2, 2, 3)
plt.plot(x, np.cos(x))plt.show()

在这段代码中,我们选择了画布的第一个区域作为当前子图,并在该子图中绘制了正弦曲线。通过类似的方式,我们在第三个子图中绘制了余弦曲线。
在这里插入图片描述

方法二:简略写法

第二种方法是方法一的简略写法,只需去掉逗号即可:

import matplotlib.pyplot as plt
import numpy as np# 将画布分为2行2列,将图画到画布的指定区域
x = np.linspace(1, 10, 100)plt.subplot(221)
plt.plot(x, np.sin(x))plt.subplot(223)
plt.plot(x, np.cos(x))plt.show()

方法三:plt.subplots()

第三种方法通过plt.subplots()创建包含多个子图的画布,并返回子图对象的元组:

import matplotlib.pyplot as plt
import numpy as np# 将画布分为2行2列,创建子图对象
x = np.linspace(1, 10, 100)fig, ax = plt.subplots(nrows=2, ncols=2)ax[0][1].plot(x, np.sin(x))
ax[1][1].plot(x, np.cos(x))plt.show()

这种方法返回了一个包含子图对象的元组 (fig, ax),通过 ax 对象可以选择和操作不同的子图区域。
在这里插入图片描述

实例展示

通过一个实际的例子,结合Matplotlib的画布分区,展示如何绘制多个子图,并在每个子图中展示不同的数据:

import matplotlib.pyplot as plt
import numpy as np# 生成一些虚构的数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.exp(x)# 创建画布并分为2行2列
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))ax[0][0].plot(x, y1, color='blue', label='sin(x)')
ax[0][1].plot(x, y2, color='green', label='cos(x)')
ax[1][0].plot(x, y3, color='orange', label='x^2')
ax[1][1].plot(x, y4, color='red', label='exp(x)')# 添加标题和图例
for i in range(2):for j in range(2):ax[i][j].set_title(['Sine Curve', 'Cosine Curve', 'Quadratic Curve', 'Exponential Curve'][i * 2 + j])ax[i][j].legend()plt.tight_layout()
plt.show()

在这个例子中,我们展示了如何在一个画布上展示多个子图,每个子图中绘制不同类型的数据,并通过标题和图例使图形更加清晰。

添加更多元素

最后,我们展示了如何在子图中添加更多的元素,例如坐标轴标签、网格线和自定义颜色、样式:

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(8, 8))# 子图1
ax[0].plot(x, y1, color='blue', label='sin(x)', linestyle='--', linewidth=2)
ax[0].set_title('Sine Curve')
ax[0].legend()
ax[0].grid(True, linestyle=':', alpha=0.7)
ax[0].set_xlabel('X-axis')
ax[0].set_ylabel('Y-axis')# 子图2
ax[1].plot(x, y2, color='green', label='cos(x)', linestyle='-', linewidth=2)
ax[1].set_title('Cosine Curve')
ax[1].legend()
ax[1].grid(True, linestyle=':', alpha=0.7)
ax[1].set_xlabel('X-axis')
ax[1].set_ylabel('Y-axis')plt.tight_layout()
plt.show()

在这个例子中,我们通过添加标题、标签、网格线和坐标轴标签,增强了子图中数据的表达力和可读性。

通过这些例子,我们深入探讨了Matplotlib的画布分区技术及其在数据可视化中的应用。
在这里插入图片描述

进一步探索Matplotlib画布分区

自定义子图布局

Matplotlib允许用户自定义子图的布局方式,例如不规则的子图排列。以下是一个示例,展示了如何使用gridspec模块创建不规则布局的子图:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np# 生成一些虚构的数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.exp(x)# 创建画布并使用gridspec定义子图布局
fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(3, 3, width_ratios=[1, 1, 2], height_ratios=[1, 2, 1])# 子图1
ax1 = plt.subplot(gs[0, 0])
ax1.plot(x, y1, color='blue', label='sin(x)')
ax1.set_title('Sine Curve')
ax1.legend()# 子图2
ax2 = plt.subplot(gs[0, 1])
ax2.plot(x, y2, color='green', label='cos(x)')
ax2.set_title('Cosine Curve')
ax2.legend()# 子图3
ax3 = plt.subplot(gs[1:, :2])
ax3.plot(x, y3, color='orange', label='x^2')
ax3.set_title('Quadratic Curve')
ax3.legend()# 子图4
ax4 = plt.subplot(gs[1:, 2])
ax4.plot(x, y4, color='red', label='exp(x)')
ax4.set_title('Exponential Curve')
ax4.legend()plt.tight_layout()
plt.show()

在这个例子中,我们使用gridspec模块创建了一个3x3的子图网格,通过width_ratiosheight_ratios参数指定了每行和每列的相对宽度和高度。然后,我们根据这个网格布局创建了四个子图,并在每个子图中绘制不同的数据。

3D子图

Matplotlib还支持在画布上创建3D子图。以下是一个简单的示例,展示如何创建一个包含3D散点图的子图:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np# 生成一些虚构的3D数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)# 创建画布和3D子图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')# 绘制3D散点图
ax.scatter(x, y, z, c='blue', marker='o', label='Random Points')# 设置坐标轴标签
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')# 添加图例
ax.legend()plt.show()

在这个例子中,我们通过mpl_toolkits.mplot3d导入Axes3D,然后使用fig.add_subplot(111, projection='3d')创建了一个3D子图。接着,我们在3D子图中绘制了散点图,展示了X、Y、Z三个维度的数据关系。

结语

通过本文的介绍和实例,我们深入探讨了Matplotlib中画布分区的不同方法,并展示了如何在子图中绘制不同类型的数据。从自定义布局到3D子图,Matplotlib提供了丰富的功能,帮助用户创建复杂和多样化的图形。

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

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

相关文章

代码随想录27期|Python|Day35|435. 无重叠区间|763.划分字母区间|56. 合并区间

435. 无重叠区间 和昨天的射爆气球是一样的处理方式: 由于不需要进行不重合的时候的计算,只需要对重合进行处理,所以反而更加简单。 1、按照区间左边界从小到大排序; 2、从索引1开始遍历,对于i-1的右边界大于i的左边…

网页无法访问但是有网什么原因

目录 1.运行网络诊断,确认原因 原因A.远程计算机或设备将不接受连接(该设备或资源(Web 代理)未设置为接受端口“7890”上的连接 原因B.DNS服务器未响应 场景A.其他的浏览器可以打开网页,自带的Edge却不行 方法A:关闭代理 Google自带翻译…

用户头像上传

将用户上传的头像存储在腾讯云存储桶里 注册腾讯云 https://cloud.tencent.com/login 创建存储桶 配置跨域 来源 * (任何都可以访问) put get post 请求都可以 点击概览,查看存储桶基本信息 记录保存存储桶名称和地域 找到api密钥管理,新建密钥 ht…

Git学习笔记(第7章):IDEA实现Git操作(VSCode)

目录 7.1 配置忽略文件 7.2 初始化本地库 7.3 添加暂存区、提交本地库 7.4 修改文件 补充:工具栏简介 7.1 配置忽略文件 问题引入 在版本控制系统中,有些文件或目录是不需要纳入版本管理的,比如编译产生的临时文件、日志文件、缓存文件等…

项目篇:基于UDP通信模型的网络聊天室

思维导图 基于UDP通信模型的网络聊天室 消息分类及数据包结构 服务器端 #include <head.h> #define SER_PORT 8888 #define SER_IP "192.168.232.133" typedef struct mb {struct sockaddr_in cin;char name[20];struct mb *next; }*member; //群发消息 int …

【window】Windows11:该文件没有与之关联的应用来执行该操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;人工智能 之前win10升级win11后&#xff0c;受不了桌面软件图标的的小箭头&#xff0c;所以弄掉了&#xff0c;但是随之而来产…

9个好习惯教会你设计商业模式的电商干货,真心分享丨运营逻辑

9个好习惯教会你设计商业模式的电商干货&#xff0c;真心分享丨运营逻辑 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 最近&#xff0c;有很多新认识的朋友&#xff0c;都在询问我最近市场上&#xff0c;有什么好的…

定类变量的频率分析(SPSS

目录 1.导入数据&#xff1a;2.频率分析&#xff1a;3.结果分析4.表格导出为excel小结&#xff1a; 1.导入数据&#xff1a; 直接把表格拖入spss 然后点确定 下面会有变量视图&#xff0c;查看各个指标的类型和属性&#xff1a; 2.频率分析&#xff1a; 点击频率分析 选择…

json-server的基础使用

本篇文章与另一篇文章有关系axios的基本使用&#xff0c;大家可以看看这篇文章 json-server 是什么? 用来快速搭建模拟的 REST API 的工具包 可以30秒内快速为我们搭建一个假的基于 REST API的服务 我们要如何使用呢&#xff1f; 1.先安装 //全局安装 npm i -g json-server …

伪原创文章生成器软件免费使用的方法

写文章不仅消耗时间&#xff0c;而且还容易出现写不出内容的问题&#xff0c;随着技术的发展&#xff0c;越来越多的人开始不再亲历亲为的去写文章了&#xff0c;而是用起了伪原创文章生成器软件&#xff0c;对于还不了解自动生成文章软件的人&#xff0c;可不要小瞧这个它了&a…

JOSEF约瑟 零序电流继电器 JL-8D/2X122A4(S) 0-30AAC 220VDC

系列型号 JL-8D/3X1定时限电流继电器&#xff1b;JL-8D/3X111A2定时限电流继电器&#xff1b; JL-8D/3X121A2定时限电流继电器&#xff1b;JL-8D/3X211A2定时限电流继电器&#xff1b; JL-8D/3X221A2定时限电流继电器&#xff1b;JL-8D/3X2定时限电流继电器&#xff1b; JL-8D/…

[小程序]Http网络请求

一、数据请求限制 出于安全性(bushi)考虑&#xff0c;小程序请求的数据接口必须具备以下两个条件&#xff1a; ①只能请求Https类型 ②必须将接口域名添加到信任列表中 1.配置request合法域名 配置步骤如下&#xff1a;小程序管理后台->开发->开发设置->服务器域名-&g…

幻兽帕鲁专用服务器

随着幻兽帕鲁这款游戏的热度持续升温&#xff0c;我们遍寻全网&#xff0c;带给各位玩家一个全新的、高品质的游戏体验——莱卡云服务器。有幻兽帕鲁的热衷者们无需再为了服务器的选取困扰&#xff0c;因为我们可以肯定地说&#xff1a;选择莱卡云&#xff0c;你不会失望。 首先…

java SSM政府采购管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM政府采购管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

飞书+ChatGPT+cpolar搭建企业智能AI助手并实现无公网ip远程访问

文章目录 推荐 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂…

C语言第五弹---分支语句(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 分支语句 1、if语句1.1、if1.2、 else1.3、 分支中包含多条语句1.4、嵌套if1.5、 悬空else问题 2、关系操作符3、 条件操作符总结 C语言是结构化的程序设计语言&…

第04章_IDEA的安装与使用(下)(IDEA断点调试,IDEA常用插件)

文章目录 第04章_IDEA的安装与使用&#xff08;下&#xff09;8. 快捷键的使用8.1 常用快捷键8.2 查看快捷键1、已知快捷键操作名&#xff0c;未知快捷键2、已知快捷键&#xff0c;不知道对应的操作名 8.3 自定义快捷键8.4 使用其它平台快捷键 9. IDEA断点调试(Debug)9.1 为什么…

一零七七、将Hexo cl Hexo g Hexo s通过systemctl命令管理

背景&#xff1a; 服务器需要执行hexo s来运行项目&#xff0c;但这个命令是基于前台的&#xff0c;故想直接嫁接在systemctl命令基础上来控制环境&#xff1a; Centos 8 前置环境就不说了,Hexo安装好&#xff0c;起码装完自己得先看hexo命令生效没&#xff0c;前置环境做好后…

Leetcode刷题笔记题解(C++):LCR 102. 目标和

思路&#xff1a;利用回溯去遍历&#xff0c;回溯结束条件为遍历到最后一个数字&#xff0c;如果符合target则目标数1 class Solution { public://记录合为结果的数量int count 0;int findTargetSumWays(vector<int>& nums, int target) {//利用回溯来寻找backtrac…

《WebKit 技术内幕》之九(2): JavaScript引擎

2 V8引擎 2.1 基础 V8是一个开源项目&#xff0c;也是一个JavaScript引擎的实现。它最开始是由一些语言方面的专家设计出来的&#xff0c;后被Google收购&#xff0c;成为了JavaScript引擎和众多相关技术的引领者。其目的很简单&#xff0c;就是为了提高性能。因为在当时之前…