在ipython notebook中使用matplotlib内联后端时,默认行为是使用bbox_inches='tight'通过savefig()在内部生成嵌入的png图像。这消除了轴周围的空白,在大多数情况下都很好。
但是,有时可能需要(暂时)禁用此功能,例如,当需要手动保持两个图形垂直对齐时(假设我们不想在此处使用子块):

%matplotlib inline
from pylab import *
plot(rand(100))
subplots_adjust(left=0.2) # Has no effect with inline, but works as expected with qt
figure()
plot(rand(100)*10000) # Will result in a larger left margin for this figure...
subplots_adjust(left=0.2)

那么如何禁止这种行为呢?谢谢~
编辑
为了使这里涉及的问题更加明确(感谢anzel),在savefig()中的bbox戡inches='tight'选项触发自动布局调整后,由于要在ytickLabels中显示更多的数字,第二个数字将具有更大的左边距(和更小的右边距)。笔记本内部调用它来生成嵌入的png输出。它将有效地截断我有意用subblots_adjust()创建的任何额外空间,以便第二个图形看起来将向右移动,而不是与第一个图形垂直“对齐”。
很容易明白我的意思——只要试试上面的代码片段:)
我不在这里使用子批次/子批次的原因(见anzel回答的注释)是在这种特殊情况下,这两个数字是由几十个小的子批次以及一些额外的格式/标签组成的。将它们合并到一个更大的子块数组中不是一件容易的事…

最佳答案

这里有一个更完整的答案:Matplotlib and Ipython-notebook: Displaying exactly the figure that will be saved
诀窍是关闭ipython中的bbox_inches='tight'设置。暂时这么做有点尴尬,但只要在一个块中运行ipython魔术:%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
如果要切换回正常方式(轴标签不会自动剪切),可以运行%config InlineBackend.print_figure_kwargs = {'bbox_inches':'tight'},但必须在需要精确边界框的绘图块之后。

关于python - 在ipython Notebook中使用Matplotlib内联时如何禁用bbox_inches ='tight',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26714626/

10-16 16:19