目标是在一个简单的图中插入一个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()
上面的代码给出了以下输出:
matplotlib文档说明matplotlib.pyplot.axes()
函数采用的参数是一个定义为rect=[left, bottom, width, height]
的列表,其中坐标left, bottom, width, height
被添加为标准化(0,1)
值。
任何人都可以向我解释一下吗?
最后两个坐标是sub_figure的大小,我得到的很多,现在与前两个的交易是什么?
答案 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)
,看起来是正确的。
你可以做一些测试。无论您如何平移或缩放主轴,子轴都不会受到影响。但是,如果您调整图形大小,两组轴都会改变大小以进行补偿。子轴应始终具有与图形本身相同的纵横比,因为它们的尺寸如何。