matplotlib中手工绘制的子图

时间:2017-08-11 06:18:05

标签: python matplotlib

手工绘制子图。

我指的是以下链接

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

  

创建轴的最基本方法是使用plt.axes函数。正如我们之前所见,默认情况下,这会创建一个填充整个图形的标准轴对象。 plt.axes还有一个可选参数,它是图坐标系中四个数字的列表。这些数字代表图坐标系中的[左,底,宽,高],范围从图的左下角的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)并且长度和高度是0.2即,在位置的右垂直线0.85但我观察的是0.9?为什么会有这种不同。请解释一下。

1 个答案:

答案 0 :(得分:0)

plt.axes给出的数字以图为单位,其中数字为1个单位宽,1个单位为高。
让我突出重点:

  

例如,我们可以通过将x和y位置设置为0.65(即从宽度的65%和高度的65%开始)在另一个轴的右上角创建一个插入轴图中)和x和y范围为0.2(即轴的大小是宽度的20%和图中的高度的20%

也许图片有助于更多地理解

enter image description here

<小时/> 这就是说,当这个代码与IPython或jupyter中的内联后端一起使用时,有一点微妙。在这种情况下,输出中显示的图形的大小可能与原始图形略有不同,因为它被裁剪或扩展以很好地适应内部绘制的所有内容。这相当于bbox_to_inched="tight"的{​​{1}}选项。因此,如果要验证子图确实位于图形大小的65%且大20%,则需要将代码作为笔记本外部的脚本运行,或者保存图savefig(不使用plt.savefig("test.png")选项)。

最后一点:虽然bbox_to_inched="tight"可能是在图形坐标中添加轴的简单选项,但通常需要在轴坐标中添加插入,即以轴的宽度和高度的百分比而不是图宽度和高度。这可以按如下方式完成:

add_axes