matplotlib.pyplot.axes()参数混淆

时间:2017-07-31 14:37:10

标签: python python-2.7 matplotlib

目标是在一个简单的图中插入一个sub_figure,如下所示:

import numpy as np
from matplotlib import pyplot as plt
X = np.linspace(-6, 6, 1024)
Y = np.sinc(X)
X_detail = np.linspace(-3, 3, 1024)
Y_detail = np.sinc(X_detail)
plt.plot(X, Y, c = 'k')
sub_axes = plt.axes([0.6,0.6,0.25,0.25])
sub_axes.plot(X_detail, Y_detail, c = 'k')
plt.setp(sub_axes)
plt.show() 

上面的代码给出了以下输出:

enter image description here

matplotlib文档说明matplotlib.pyplot.axes()函数采用的参数是一个定义为rect=[left, bottom, width, height]的列表,其中坐标left, bottom, width, height被添加为标准化(0,1)值。 任何人都可以向我解释一下吗?

最后两个坐标是sub_figure的大小,我得到的很多,现在与前两个​​的交易是什么?

1 个答案:

答案 0 :(得分:1)

混淆似乎来自matplotlib使用的不同坐标系。以下是关于该主题的(相当详尽的)教程的链接:https://matplotlib.org/users/transforms_tutorial.html。我将在此总结直接影响到你的关键点。

您在轴上看到的坐标称为data space or data coordinates。这基本上是图的xlim和ylim。请注意,这两个图完全独立,不受图形大小或位置的影响。

当您说sub_axes = plt.axes([0.6,0.6,0.25,0.25])时,您正在指定图空间或图坐标中的坐标。这在概念上与axis space or axis coordinates非常相似,不同之处在于它适用于整个图形而不仅仅是一组单独的轴。

在这种情况下,子轴的原点相对于的左下角为(0.6, 0.6)的右上角是(1, 1)的位置。正如预期的那样,子轴从图形窗口中间的上方和右侧开始。

同样,宽度为(0.25, 0.25),这意味着子轴的尺寸是每个尺寸中的1/4。这也可以解释为子轴的右上角位于 figure 空间中的(0.85, 0.85),看起来是正确的。

你可以做一些测试。无论您如何平移或缩放主轴,子轴都不会受到影响。但是,如果您调整图形大小,两组轴都会改变大小以进行补偿。子轴应始终具有与图形本身相同的纵横比,因为它们的尺寸如何。