add_axes 和 add_subplot 之间有什么区别?

2024-01-08

在之前的一个answer https://stackoverflow.com/a/43283905有人推荐我使用add_subplot代替add_axes正确显示轴,但搜索文档我无法理解何时以及为何应该使用这些函数之一。

谁能解释一下这些差异吗?


共同点

Both, add_axes https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_axes and add_subplot https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_subplot向图形添加轴。他们都返回一个(a的子类)matplotlib.axes.Axes object.

然而,用于添加轴的机制有很大不同。

add_axes

的呼叫签名add_axes https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_axes is add_axes(rect), where rect是一个列表[x0, y0, width, height]表示图形坐标中新轴的左下点(x0,y0)及其宽度和高度。因此轴位于画布上的绝对坐标中。例如。

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])

在画布中放置一个与画布本身一样大的图形。

add_subplot

的呼叫签名add_subplot https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_subplot不直接提供将轴放置在预定义位置的选项。它允许根据子图网格指定轴的位置。指定此位置的常用且最简单的方法是 3 整数表示法,

fig = plt.figure()
ax = fig.add_subplot(231)

在此示例中,在第一个位置 (1)在 2 行 3 列的网格上。仅生产单个轴,add_subplot(111)将使用(1 x 1 子图网格上的第一个图)。 (在较新的 matplotlib 版本中,add_subplot()没有任何参数也是可能的。)

这种方法的优点是 matplotlib 负责精确定位。默认情况下add_subplot(111)会产生一个位于[0.125,0.11,0.775,0.77]或类似的,它已经在轴周围为标题和(勾号)标签留下了足够的空间。然而,这个位置也可能会根据情节中的其他元素、标题集等而改变。 也可以使用调整pyplot.subplots_adjust(...) or pyplot.tight_layout().

在多数情况下,add_subplot将是在画布上创建绘图轴的首选方法。仅在精确定位很重要的情况下,add_axes可能有用。

Example

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,3)

fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")

fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")

plt.tight_layout()
plt.show()

选择

获取一个或多个子图及其句柄的最简单方法是plt.subplots() https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html。对于一个轴,使用

fig, ax = plt.subplots()

或者,如果需要更多子图,

fig, axes = plt.subplots(nrows=3, ncols=4)

最初的问题

In the 使用放置轴fig.add_axes([0,0,1,1]),使其紧贴图形边界。这样做的缺点当然是刻度、刻度标签、轴标签和标题被切断。因此我在答案的评论之一中建议使用fig.add_subplot因为这将自动为这些元素留出足够的空间,如果这还不够,可以使用进行调整pyplot.subplots_adjust(...) or pyplot.tight_layout().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

add_axes 和 add_subplot 之间有什么区别? 的相关文章

  • Erlang:到 Python 实例的端口没有响应

    我正在尝试通过 Erlang 端口与外部 python 进程进行通信 首先 打开一个端口 然后通过 stdin 将消息发送到外部进程 我期待在进程的标准输出上得到相应的答复 我的尝试如下所示 open a port Port open po
  • 熊猫按 n 最大总和分组

    我正在尝试使用groupby nlargest and sum在 Pandas 中一起运行 但在运行时遇到困难 State County Population Alabama a 100 Alabama b 50 Alabama c 40
  • Flask-SocketIO redis 订阅

    我在用着https github com miguelgrinberg Flask SocketIO https github com miguelgrinberg Flask SocketIO实现 WebSocket 服务器 我需要从另一
  • GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

    GUI测试工具如何Py用例 http pypi python org pypi PyUseCase重命名为故事文本 http pypi python org pypi StoryText 相比于Dogtail http en wikiped
  • 如何同时运行多个功能[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有以下代码 my func1 my func2 my func3 my func4 my func5 是否可以同时计算函数的数据 而
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • Python 不考虑 distutils.cfg

    我已经尝试了给出的所有内容 并且所有教程都指向相同的方向 即使用 mingw 作为 python 而不是 Visual C 中的编译器 我确实有 Visual C 和 mingw 当我想使用 pip 安装时 问题开始出现 它总是给Unabl
  • Python Selenium 打印另存为 PDF 等待文件名输入

    我正在尝试通过打印对话框将网站另存为 PDF 我的代码允许我另存为pdf 但要求我输入文件名 我不知道如何将文件名传递到弹出框 附上我的代码 import time from selenium import webdriver import
  • 如何找到多个 pandas 数据框中一对列与任意顺序对的交集?

    我有多个 pandas 数据框 为了简单起见 假设我有三个 gt gt df1 col1 col2 id1 A B id2 C D id3 B A id4 E F gt gt df2 col1 col2 id1 B A id2 D C id
  • 为什么需要设置WORKON_HOME环境变量?

    我已经有一段时间没有使用 python 虚拟环境了 但我也安装了虚拟环境包装器 我的问题是 在文档页面中它说要这样做 export WORKON HOME Envs mkdir p WORKON HOME source usr local
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • 列表推导式和 for 循环中的 Lambda 表达式[重复]

    这个问题在这里已经有答案了 我想要一个 lambda 列表 作为一些繁重计算的缓存 并注意到这一点 gt gt gt j for j in lambda i for i in range 10 9 9 9 9 9 9 9 9 9 9 Alt
  • Pandas 字典键到列[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 index column1 e1 u c680 5 u c681 1 u c682 2 u c57 e2 u c680 6 u c681 2 u c682 1 u c57 e3 u c68
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 如何检测一个二维数组是否在另一个二维数组内?

    因此 在堆栈溢出成员的帮助下 我得到了以下代码 data needle s which is a png image base64 code goes here decoded data decode base64 f cStringIO
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • ProcessPoolExecutor 传递多个参数

    ESPN播放器免费 class ESPNPlayerFree def init self player id match id match id team 团队名单1 277906 cA2i150s81HI3qbq1fzi za1Oq5CG
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不

随机推荐