【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 📊 一、fig和ax简介
  • 🖼️ 二、fig的用法
      • 设置图形大小
      • 设置图形标题
      • 保存图形
      • 显示图形
  • 📈 三、ax的用法
      • 绘制图形
      • 设置坐标轴标签和刻度
      • 设置坐标轴范围
      • 添加图例
      • 完整代码
  • 🎨 四、多个子图
  • 🔍 五、fig和ax的交互
      • 使用 fig.add_axes() 添加 Axes 对象
      • 使用 ax.figure 获取所属的 Figure 对象
      • 共享坐标轴
  • 🎭 六、fig和ax的进一步定制
      • 自定义颜色、线条样式和标记
      • 添加网格、边框和背景色
  • 🤝七、期待与你共同进步
  • 🎉 结语
  • 🔍 关键词

📊 一、fig和ax简介

  在Matplotlib库中,fig, ax = plt.subplots() 是一个常用的函数,用于创建一个新的图形窗口以及一个或多个子图。返回的 figax 对象分别代表了整个图形和其中的一个子图。figFigure 类的实例,代表整个绘图窗口,而 axAxes 类的实例,代表其中的一个子图或坐标轴。

  通过 figax,我们可以方便地对整个图形和子图进行各种操作,比如设置标题、坐标轴标签、刻度等。

🖼️ 二、fig的用法

fig 对象提供了许多方法和属性,用于控制整个图形的外观和行为。以下是一些常用的用法:

设置图形大小

可以通过 figsize 参数在创建图形时设置其大小(宽和高,单位为英寸)。

import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize=(8, 6))

设置图形标题

使用 suptitle() 方法可以为整个图形设置标题。

fig.suptitle('My Title', fontsize=14)

保存图形

使用 savefig() 方法可以将整个图形保存为图片文件。

fig.savefig('my_figure.png')

显示图形

通过 plt.show() 可以显示整个图形。

plt.show()

📈 三、ax的用法

ax 对象代表了图形中的一个子图,它提供了丰富的接口用于绘制图形和设置坐标轴属性。

绘制图形

使用 ax 对象的方法可以直接在子图上绘制各种图形,如折线图、散点图等。

import numpy as npx = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots()
ax.plot(x, y)

设置坐标轴标签和刻度

使用 set_xlabel(), set_ylabel(), set_xticks(), set_yticks() 等方法可以设置坐标轴的标签和刻度。

ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_xticks(np.arange(0, 11, 2))
ax.set_yticks([-1, 0, 1])

设置坐标轴范围

使用 set_xlim()set_ylim() 方法可以设置坐标轴的范围。

ax.set_xlim(0, 10)
ax.set_ylim(-1.5, 1.5)

添加图例

如果在一个子图上绘制了多个图形,可以使用 legend() 方法添加图例。

ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.legend()

完整代码

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots()
ax.plot(x, y)ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_xticks(np.arange(0, 11, 2))
ax.set_yticks([-1, 0, 1])ax.set_xlim(0, 10)
ax.set_ylim(-1.5, 1.5)ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.legend()plt.show()

🎨 四、多个子图

  plt.subplots() 函数还可以用于创建包含多个子图的图形。通过指定 nrowsncols 参数,可以定义子图的行数和列数。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)fig, axs = plt.subplots(nrows=2, ncols=2)# axs 是一个 2x2 的数组,每个元素都是一个 Axes 对象
axs[0, 0].plot(x, np.sin(x))
axs[0, 1].plot(x, np.cos(x))
axs[1, 0].plot(x, np.tan(x))
axs[1, 1].plot(x, 1/x)plt.show()

在这个例子中,axs 是一个 2x2 的 NumPy 数组,每个元素都是一个 Axes 对象,代表图形中的一个子图。我们可以通过索引 axs[i, j] 来访问和操作特定的子图。

🔍 五、fig和ax的交互

  figax 对象之间也有一些交互。例如,我们可以通过 fig.add_axes() 方法手动向图形中添加一个 Axes 对象,或者通过 ax.figure 属性获取一个 Axes 对象所属的 Figure 对象。
下面,我们将深入探讨 figax 之间的交互,并通过示例代码展示如何使用它们来创建更复杂的图形布局和交互。

使用 fig.add_axes() 添加 Axes 对象

  虽然 plt.subplots() 是一种非常方便的创建子图的方法,但有时我们可能需要更灵活地控制子图的位置和大小。这时,可以使用 fig.add_axes() 方法来手动添加 Axes 对象。

import matplotlib.pyplot as plt# 创建一个图形对象
fig = plt.figure()# 使用 add_axes() 方法添加 Axes 对象
# 参数是一个四元组,表示子图在图形中的位置(左下角 x, 左下角 y, 宽度, 高度)
# 这些值都是相对于图形大小的分数
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])# 在第一个 Axes 对象上绘制图形
ax1.plot([1, 2, 3, 4], [1, 4, 2, 3])# 还可以继续添加更多的 Axes 对象
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])
ax2.plot([1, 2, 3, 4], [4, 3, 2, 1])# 显示图形
plt.show()

在上面的代码中,我们手动指定了每个 Axes 对象在图形中的位置和大小。这种方法比 plt.subplots() 更底层,因此提供了更大的灵活性。

使用 ax.figure 获取所属的 Figure 对象

  每个 Axes 对象都有一个 figure 属性,它指向该 Axes 对象所属的 Figure 对象。通过这个属性,我们可以访问和操作整个图形。

import matplotlib.pyplot as plt# 创建一个图形和一个 Axes 对象
fig, ax = plt.subplots()# 使用 ax.figure 访问所属的 Figure 对象
print(ax.figure is fig)  # 输出: True# 也可以通过 ax.figure 来操作整个图形
ax.figure.suptitle('My Title')# 显示图形
plt.show()

在这个例子中,我们验证了 ax.figure 是否与通过 plt.subplots() 返回的 fig 对象相同,并展示了如何使用 ax.figure 来设置整个图形的标题。

共享坐标轴

  有时,我们可能希望多个子图共享一个或多个坐标轴。Matplotlib 提供了 sharexsharey 参数来实现这一功能。

import matplotlib.pyplot as plt# 创建两个子图,并共享 x 轴
fig, axs = plt.subplots(nrows=2, sharex=True)axs[0].plot([1, 2, 3], [1, 2, 3])
axs[1].plot([1, 2, 3], [3, 2, 1])# 显示图形
plt.show()

在这个例子中,两个子图共享了 x 轴,因此它们的 x 轴刻度和标签是相同的。

  通过了解 figax 之间的交互,我们可以更灵活地控制图形的布局和外观,从而创建出更具吸引力的可视化效果。无论是通过 plt.subplots() 创建子图,还是手动使用 fig.add_axes() 添加子图,我们都能够充分利用 Matplotlib 的强大功能来创建出符合我们需求的图形。

🎭 六、fig和ax的进一步定制

  除了基本的绘图和坐标轴设置,figax 还提供了许多高级功能,允许我们对图形进行更深入的定制。

自定义颜色、线条样式和标记

在绘制图形时,我们可以自定义线条的颜色、样式(实线、虚线等)以及数据点的标记样式。

ax.plot(x, y, color='red', linestyle='--', marker='o')

添加网格、边框和背景色

通过 grid(), spines 属性以及 patch 对象,我们可以为图形添加网格线、控制边框的显示以及设置背景色。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots()ax.grid(True)  # 显示网格线
ax.spines['top'].set_visible(False)  # 隐藏上边框
ax.spines['right'].set_visible(False)  # 隐藏右边框
fig.patch.set_facecolor('lightgrey')  # 设置背景色为浅灰色# 显示图形
plt.show()

🤝七、期待与你共同进步

  🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

  🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

  📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

  💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

  🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉

🎉 结语

  通过本博客的学习,你应该已经对 figax 的用法有了更深入的了解。Matplotlib 是一个强大而灵活的绘图库,掌握其基本用法和高级定制技巧将为你的数据分析和可视化工作带来极大的便利。不断学习和实践,你将能够创建出更加精美和有效的数据可视化作品。感谢阅读,祝你学习愉快,收获满满!🚀

🔍 关键词

  Matplotlib, fig, ax, subplots, 数据可视化, 图形定制, 坐标轴设置, 文本注释, 箭头, 共享坐标轴, 学习资源, 扩展阅读

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

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

相关文章

求职干货!如何自信地进行自我介绍和面试问答!

面试在求职过程中扮演着至关重要的角色。它不仅是雇主评估候选人能力和适应性的关键环节,也是候选人展示自我、展示技能和经验的绝佳机会。通过面试,雇主可以更直接地了解候选人的沟通能力、解决问题的能力以及团队合作精神,这些都是成功工作…

ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术

原文链接:ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596849&idx3&sn111d68286f9752008bca95a5ec575bb3&chksmfa823ad6cdf5b3c0c446eceb5cf29cccc3161d746bdd9f2…

实例成员、静态成员

一、静态成员先于实例成员存在 类被加载到内存时,静态变量分配内存空间,静态方法分配入口地址 只有创建对象之后,实例变量分配内存空间,实例方法分配入口地址 当再创建对象时,实例方法不再分配入口地址,…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 在使用 Stri…

蓝桥杯[OJ 3412]-最小化战斗力差距-CPP-贪心

目录 一、问题描述: 二、整体思路: 三、代码: 一、问题描述: 二、整体思路: 首先每个值都有可能为min(b),那么对于每个可能为min(b)的值,要使得max(a)尽可能小,因此枚举所有相差最…

高颜值抓包工具Charles,实现Mac和IOS端抓取https请求

Hi,大家好。在进行测试的过程中,不可避免的会有程序报错,为了能更快修复掉Bug,我们作为测试人员需要给开发人员提供更准确的报错信息或者接口地址,这个时候就需要用到我们的抓包工具。 常见的抓包工具有Fiddler、Char…

【NR技术】 3GPP支持无人机服务的关键性能指标

1 性能指标概述 5G系统传输的数据包括安装在无人机上的硬件设备(如摄像头)收集的数据,例如图片、视频和文件。也可以传输一些软件计算或统计数据,例如无人机管理数据。5G系统传输的业务控制数据可基于应用触发,如无人机上设备的开关、旋转、升…

Oracle之ADG与DG的区别?

在上云后的Oracle数据灾备场景中,我们经常听到DBA迁移工程师讲到“在这个项目中用ADG进行数据实时备份,ADG比DG更好!”。究竟ADG作Oracle数据灾备的优势在什么地方? 一、ADG主要解决了DG时代读写不能并行的问题 DG时代的数据同步…

c# winform部门管理系统

c# winform部门管理系统 数据库SQL语句脚本代码 CREATE TABLE Department(DepartmentID INT PRIMARY KEY IDENTITY(1,1),Name NVARCHAR(50) NOT NULL ); SELECT * FROM Department -- 插入部门数据 INSERT INTO Department (Name) VALUES (人力资源部); INSERT INTO Departmen…

【c 语言 】移位操作符详解

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

C++感受1-打开浏览器,线上玩转C++

介绍了五款在线编译、编译、运行的C线上环境。并选择其中的 “在线GDB” 网站动手编写、运行第一个C程序 “Hello World”,同时和线下IDE进行对比。 1. 课堂视频 打开浏览器,线上玩转C 2. 在线C编译环境对比 onlinegdb : www.onlinegdb.comr…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复灯罩需要多久时间?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题基本是可以修复的。 修复汽车灯罩的时间取决于多个因素,如灯罩的破损程度、修复方法的选择以及维修店的工作效率等。 一般来说,如果灯罩的破损程度较轻,仅需要进行简单的修复或翻新&#xf…

如何考上东南大学计算机学院?

东南大学招生学院是计算机科学与工程学院、苏州联合研究生院,复试公平,不歧视双非考生,985院校中性价比较高,但近年热度在逐年上涨,需要警惕。 建议报考计算机科学与工程学院081200计算机科学与技术专业目标分数为380…

帮管客CRM(jiliyu)接口SQL注入漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 帮管客CRM客户管理系统专注于为企业提供crm客户关系管理、crm管理系统、crm软件产品及企业销售管理流程解决方案服务,助力企业业绩增长。 声明 请勿利用文章内的相关技术从事非法测试,由…

jdk17出现错误无法初始化主类 和NoClassDefFoundError:Vector的解决方法

概述:网上流传文章大多都是编译和运行都加下面这串代码 --add-modulesjdk.incubator.vector我估计他们大多都是复制粘贴的文章,这种东西就是电子垃圾,在idea中,大多人都习惯用maven来构建java项目,接下来我将讲解使用…

【C++】string学习 — 手搓string类项目

手搓string项目 1 string类介绍2 功能描述3 代码实现3.0 基础框架3.1 构造函数 和 析构函数3.2 流操作符重载 和 尾插扩容3.4 运算符重载3.5 实用功能3.6 迭代器模拟 总结Thanks♪(・ω・)ノ谢谢阅读!!!下一篇…

LeetCode:206.反转链表

206. 反转链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

如何使用 Langchain、Ollama 和 Streamlit 构建 RAG

一、先决条件:您需要了解什么 在深入讨论技术细节之前,我们先概述一下先决条件。Python 的基础知识至关重要,因为它是我们将使用的主要语言。熟悉机器学习和自然语言处理的基本概念将帮助您更轻松地掌握这些概念。此外,对 Langch…

蓝桥杯练习系统(算法训练)ALGO-973 唯一的傻子

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 腿铮找2255有点事,但2255太丑了,所以腿铮不知道他的长相。正愁不知道到如何找他的时候,…

【开发环境】Ubuntu 18.04 搭建 QT编译环境详细步骤 【亲测有效】

目录 1 查看Ubuntu系统中Qt版本 2 下载Ubuntu系统Qt版本安装包 3 Qt安装 3.1 Qt 安装步骤 3.2 安装qt发现Ubuntu空间不足,怎么去扩容呢? 3.2.1 硬盘操作步骤(需要关闭虚拟机进行操作) 3.2.2 Ubuntu命令操作:安装…