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

news2025/1/12 4:31:05

文章目录

  • 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 np

x = 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.coloradmin.cn/o/1401565.html

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

相关文章

第13节-简历中的开放性问题

(点击即可收听) 不少公司的开放式题目每年不会有太大的变化,所以在答题前可先去相关求职论坛看看这些公司往年的问题,分析和思考自己应当怎么回答 开放式问题回答技巧 开放式问题主要考察的是求职者的求职动机、解决问题的能力、创造力等软实力&#xff…

C++入门之基础语法

目录 一.关键字 二.命名空间 2.1命名空间域 2.2展开命名空间域 using namespace bit 使用using将命名空间中的某个成员引入 2.3 头文件#include 2.3.1 头文件的展开和命名空间的展开区别 2.4 C的标准的库命名空间std 2.5 命名空间的套娃 三. C输入输出 3.1 流插入co…

线性代数:逆矩阵

目录 伴随阵 逆矩阵 证明:AA* A*A |A|E 证明:|A| 0 > |A*| 0 伴随阵 逆矩阵 证明:AA* A*A |A|E 证明:|A| 0 > |A*| 0

项目管理该考哪个证书❓NPDP还是软考❓

有小伙伴在纠结是要考NPDP认证呢还是考软考呢❓ 今天小编要给大家好好说说NPDP认证❗️ 💡NPDP全称New Product Development Professional,也就是产品经理国际资格认证。 🔥NPDP是国际公认的为一的新产品开发专业认证,是集理论、方…

JVM系列-2.字节码文件详解

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理🔥如果感觉博主的文…

(超详细)6-YOLOV5改进-添加ECA注意力机制

1、在yolov5/models下面新建一个EfficientChannelAttention.py文件,在里面放入下面的代码 代码如下: import torch, math from torch import nnclass EfficientChannelAttention(nn.Module): # Efficient Channel Attention moduledef __ini…

uniCloud uni-id体系的使用

目录 简介 uni-id导入和配置 用户表与文章表关联foreignKey 字段级权限控制 指定数据集权限控制 权限规则的变量和运算符 简介 uni-id已完成的功能: 注册、登录、发送短信验证码、密码加密保存、修改密码、忘记密码、头像管理、token管理、rbac权限角色体系、…

CVPR 2023 Hybrid Tutorial: All Things ViTs之mean attention distance (MAD)

All Things ViTs系列讲座从ViT视觉模型注意力机制出发,本文给出mean attention distance可视化部分阅读学习体会. 课程视频与课件: https://all-things-vits.github.io/atv/ 代码: https://colab.research.google.com/github/all-things-vits/code-samples/blob/main/probing/m…

2024年【河北省安全员B证】最新解析及河北省安全员B证试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 河北省安全员B证最新解析是安全生产模拟考试一点通生成的,河北省安全员B证证模拟考试题库是根据河北省安全员B证最新版教材汇编出河北省安全员B证仿真模拟考试。2024年【河北省安全员B证】最新解析及河北省…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门标签推荐显示实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

【Spring 篇】MyBatis注解开发:编写你的数据乐章

欢迎来到MyBatis的音乐殿堂!在这个充满节奏和韵律的舞台上,注解是我们编写数据乐章的得力助手。无需繁琐的XML配置,通过简单而强大的注解,你将能够轻松地与数据库交互。在这篇博客中,我们将深入探讨MyBatis注解开发的精…

5G_射频测试_发射机测量(四)

6.2 Base station output power 用于测量载波发射功率的大小,功率越大小区半径越大但是杂散也会越大 载波功率(用频谱仪测)天线口功率(用功率计测)载波功率是以RBW为单位的filter测量的积分功率不同带宽的多载波测试时…

一文读懂「RAG,Retrieval-Augmented Generation」检索增强生成

Retrieval-Augmented Generation(RAG)作为机器学习和自然语言处理领域的一大创新,不仅代表了技术的进步,更在实际应用中展示了其惊人的潜力。 RAG结合了检索(Retrieval)和生成(Generation&#…

项目解决方案:多地医馆的高清视频监控接入汇聚联网

目 录 一、背景 二、建设目标及需求 1.建设目标 2.现状分析 3.需求分析 三、方案设计 1.设计依据 2.设计原则 3.方案设计 3.1 方案描述 3.2 组网说明 四、产品介绍 1.视频监控综合资源管理平台介绍 2.视频录像服务器和存储 2.1概述 2.2存储设计 …

蓝桥杯省赛无忧 编程9

#include<bits/stdc.h> using namespace std; int main() {int n,k,ans0;cin>>n>>k;while(n--){int a;cin>>a;ansa&1;}if(ans&1) cout<<"Alice"<<\n;else cout<<"Bob"; return 0; }这个游戏是基于数…

软件工程应用题汇总

绘制数据流图(L0/L1/L2) DFD/L0&#xff08;基本系统模型&#xff09; 只包含源点终点和一个处理(XXX系统) DFD/L1&#xff08;功能级数据流图&#xff09;在L0基础上进一步划分处理(XXX系统) 个人理解 DFD/L2&#xff08;在L1基础上进一步分解后的数据流图&#xff09; 数据…

3.php开发-个人博客项目输入输出类留言板访问IPUA头来源

目录 知识点 : 输入输出 配置环境时&#xff1a; 搜索框&#xff1a; 留言板&#xff1a; 留言板的显示&#xff08;html&#xff09;&#xff1a; php代码显示提交的留言&#xff1a; 写入数据库 对留言内容进行显示&#xff1a; php全局变量-$_SERVER 检测来源 墨…

【复现】Hytec Inter HWL 2511 SS路由器RCE漏洞_25

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Hytec Inter HWL 2511 SS是日本Hytec Inter 公司的一款工业级 LTE 路由器&#xff0c;可用于远程数据传输&#xff0c;例如收集传…

网络安全(初版,以后会不断更新)

1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产&#xff0c;包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点&#xff08;Weakness&#xff09;&a…

class_15:虚函数

#include <iostream> #include <string> using namespace std;//基类,父类 class Vehicle{ public:string type;string contry;string color;double price;int numOfWheel;virtual ~Vehicle(){};//类中有虚函数&#xff0c;析构函数一般也写成虚函数virtual voi…