Matplotlib “标准化图形坐标”是如何工作的?

Matplotlib “标准化图形坐标”是如何工作的?,matplotlib,Matplotlib,在matplotlib中,我最近遇到了术语“标准化图形坐标”,它显然是由四个参数指定的矩形 很明显,一个矩形可以用四个数字来描述,我猜这四个数字以某种方式描述了矩形的尺寸和位置。然而,对于这些参数中的哪个指定了哪个值,我还没有找到答案 此外,我不确定这是matplotlib特定术语还是一般意义的术语,因为matplotlib文档没有引用或链接任何与此术语相关的来源 有人能解释一下这个问题吗?为了回答你的最后一个问题,术语规范化不是matplotlib特有的,你可以从中获得一个非常简短的介绍 至于

在matplotlib中,我最近遇到了术语“标准化图形坐标”,它显然是由四个参数指定的矩形

很明显,一个矩形可以用四个数字来描述,我猜这四个数字以某种方式描述了矩形的尺寸和位置。然而,对于这些参数中的哪个指定了哪个值,我还没有找到答案

此外,我不确定这是matplotlib特定术语还是一般意义的术语,因为matplotlib文档没有引用或链接任何与此术语相关的来源


有人能解释一下这个问题吗?

为了回答你的最后一个问题,术语规范化不是matplotlib特有的,你可以从中获得一个非常简短的介绍

至于Matplotlib:您可以拥有相对于不同对象的不同坐标系,例如轴、图形。 这些系统中的每一个都是标准化的,即所选参考对象的4个角始终具有以下坐标:

(0,1) Top left corner 
(1,1) Top right corner 
(1,0) Bottom right corner 
(0,0) Bottom left corner 

其中,每对的第一个元素指x轴,第二个元素指y轴

这使得艺术家对象的注释或放置更容易,因为您可以使用任何可用坐标系指定要添加的元素的位置。 您只需通过将变换对象传递给变换参数来选择适当的坐标系

例如:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot([5.], [2.], 'o')

circle=plt.Circle((0, 0), 0.1, color="g",transform=ax.transAxes) #bottom (y=0) left (x=0) green circle of radius 0.1 (expressed in coord system)
ax.add_artist(circle)

ax.annotate('I am the top (y=1.0) right (x=1.0) Figure corner',
            xy=(1, 1), xycoords=fig.transFigure,
            xytext=(0.2, 0.2), textcoords='offset points',
            )

plt.text(  # position text relative to data
    5., 2., 'I am the (5,2) data point',  # x, y, text,
    ha='center', va='bottom',   # text alignment
    transform=ax.transData      # coordinate system transformation
)
plt.text(  # position text relative to Axes
    1.0, 0.0, 'I am the bottom (y=0.0) right (x=1.0) axis corner',
    ha='right', va='bottom',
    transform=ax.transAxes
)
plt.text(  # position text relative to Figure
    0.0, 1.0, 'I am the top (y=1.0) left (x=0.0) figure corner',
    ha='left', va='top',
    transform=fig.transFigure
)


plt.show()

使用标准化图形坐标的函数有几个

一般来说,可能性是

左、下、宽、高在matplotlib中称为边界;或 左、下、右、上称为范围。 希望文档能够清楚地说明在各自的情况下应该使用哪4个元组

在这里,您似乎对GridSpec的紧密布局参数rect感兴趣。从

rect:4个浮点的元组,可选 标准化图形坐标中的左、下、右、上矩形,包括标签在内的整个子地块区域将适合该矩形。默认值为0,0,1,1


你读过并回答了吗?有几个函数使用标准化图形坐标。你指的是哪一个?通常情况下,可能是左、下、宽、高,这在matplotlib中称为;或者叫左、下、右、上。希望文档能够清楚地说明在各自的情况下需要哪4个元组。但是如果您能指出文档中不清楚的地方,我很乐意澄清。谢谢@ImportanceOfBeingErnest!我被一节弄糊涂了,它说“您可以提供一个可选的rect参数”,但没有解释哪个参数代表哪个实体。从你所说的,我猜是边界形式的,对吗?@Sheldore你的第一个链接可能与主题无关。谢谢你的第二份。但是,问题使用左下角和右上角的坐标,而答案使用不同的格式,指定左下角以及矩形的宽度和高度。这正是我的困惑所在,当需要“标准化图形坐标”时,ist使用的格式。非常感谢您提供的信息丰富的示例!这对我来说更清楚了。你认为这4个数字,比如你向下滚动一点,你会看到一个参数rect,rect=[0,0,5,1]是左下角的*x,*y,左下角的*y,*x,右上角的*y,右上角的*y?我现在理解了规范化部分,只是没有找到任何关于这个参数语义的文档。另外,在你的图中,图形比轴宽得多。你是怎么做到的?这就是我最初想要做的-将文本放置在轴的左侧,并为此目的使图形比轴大。@TobiasFeil是的,坐标是rect=[x,y,x*,y*],正如您所说的:x左下角,y左下角,x*右上角,y*右上角。按照链接的示例,您可以使用这些值,自己查看子地块区域的变化情况。在图角添加很长的文本会自动拉伸图的大小。在这个问题的范围内,这个答案中一个重要且令人困惑的细节是,代码是使用IPython内联后端在IPython/Juypter中运行的。这将生成一个保存的png版本的图形,并设置savefig的bbox_inches=tight参数。它所做的是扩展或裁剪图形以容纳所有内容;但这会导致图形坐标失去对png文件的意义。图形坐标>1的图形外部的文本仍然完全可见。请理解,图形大小不是拉伸的,但png图像大小是。是的,就是这样,就在文档中 -左,下,右,上。啊!对于像我这样一开始对文件的第一次和第二次阅读的无关信息视而不见的人来说。