2017-07-31 117 views
1

的目的是在一个简单的情节插入sub_figure如下:matplotlib.pyplot.axes()参数混淆

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

左下角的坐标? – DavidG

+0

但是那么左下角的坐标必须是(0.6,0.6)? @DavidG – User9523

+0

'plt.setp(sub_axes)'是什么意思? –

回答

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。这也可以解释为子轴的右上角在(0.85, 0.85)的空间,这看起来是正确的。

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