2017-08-11 76 views
2

次要情节手。次要情节用手matplotlib

我指以下链接

http://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/04.08-Multiple-Subplots.ipynb

创建轴的最基本的方法是使用plt.axes功能。正如我们以前所见,默认情况下,这会创建一个填充整个图形的标准轴对象。 plt.axes也采用可选参数,该参数是图形坐标系中四个数字的列表。这些数字表示图形坐标系中的[left,bottom,width,height],范围从图左下角的0到图右上角的1。例如,我们可以通过将x和y位置设置为0.65(即,从65%的宽度开始,65%的高度开始在另一个轴的右上角创建一个插入轴)。图),x和y的程度,以0.2(即,轴的尺寸是宽度为20%和该图的高度的20%):

ax1 = plt.axes() # standard axes 
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2]) 

这里例如上述我在位置期待AX2开始(0.65,0.65),因为我们有底部和左侧为0.65和0.65,但我观察(0.65,0.7)和lenght和高度为0.2,即,右垂直线的位置0.85,但我在0.9观测?为什么这是不同的。请解释一下。

回答

0

给予plt.axes的数字是在图单元,其中该图中为1个单位宽和1个单位唤起注意。
让我强调的重要组成部分:

例如,我们可以通过x和y位置设置为0.65创建另一个轴的右上角的插入轴(即,开始于65的宽度和高度的图的)和x和y的程度,以0.2(即65%的%,轴的尺寸是宽度为20%和图的高度的20% )

也许图像有助于更好地理解

enter image description here


这就是说存在当这个码被用在IPython中或jupyter内嵌后端用一点点微妙。在这种情况下,输出中显示的图形的大小可能与原始图形略有不同,因为它会被裁剪或展开以适应内部绘制的所有内容。这相当于savefigbbox_to_inched="tight"选项。因此,如果你想验证的插曲确实放置在数字规模的65%和20%大,则需要在笔记本以外运行代码的脚本,或保存数字plt.savefig("test.png")(不使用bbox_to_inched="tight"选项)。

最后一点:虽然add_axes可能是添加图形坐标轴的简单选项,但通常需要在坐标轴上添加一个插入点,即以坐标轴宽度和高度的百分比代替图形宽度,高度。这是可以做到如下:

import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1.inset_locator import InsetPosition 

fig, ax1 = plt.subplots() 

ax2 = plt.axes([0, 0, 1, 1]) 
ip = InsetPosition(ax1, [0.4, 0.1, 0.3, 0.7]) 
         #posx, posy, width, height in coordinates of ax1 
ax2.set_axes_locator(ip) 

ax2.plot([1,2,3,4]) 
plt.show()