以下代码应显示“ax”向右偏移(与“ax1”重叠),并在左侧(原来的位置)进行填充
# Implementation of matplotlib function
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
Z = np.random.rand(6, 30)
fig, (ax, ax1) = plt.subplots(1, 2)
ax.pcolor(Z)
ax1.pcolor(Z)
chartBox = ax.get_position()
ax.set_position([chartBox.x0 + chartBox.width / 2,
chartBox.y0,
chartBox.width,
chartBox.height])
ax.set_title("Original Window")
ax1.set_title("Modified Window")
plt.show()
但是在jupyter笔记本中(在vscode和colab上测试)左侧的空白被切断,但在.py文件中运行脚本时,它会正确显示。我该如何解决这个问题?
两者都在 vscode (
Python 3.12
) 中的 jupyterlab==4.1.6
版本和使用 matplotlib==3.8.4
的终端中进行了测试。将 plt.show()
更改为 plt.savefig()
会产生左侧空白(笔记本内的甚至)我怀疑笔记本的渲染有问题,但我不知道确切的设置。
背景
我正在迭代一些数据,想要显示 2×2 的多个图,在奇数配对上,我想显示居中的单个图,并关闭第二个空图。这个想法是使用
.subplots(nrows=1,ncols=2)
(因为我没有其他想法)并使用ax.set_position()
将第一个图向右偏移。事实证明它不起作用。
如今,如果您不指定任何内容,那么
%matplotlib inline
就是默认后端。如今 bbox_inches
的内联默认值是 tight
。我稍后会回到这个话题。所以一种选择是不让它inline
。如果您转到here并单击“launch binder
”徽章(底部的徽章允许您选择特定的 Jupyter 风格),您将获得一个使用现代 Jupyter 功能安装 ipympl
的会话。因此,您可以将 %matplotlib ipympl
添加为代码顶部的第一行,然后将其粘贴到新单元格中,然后运行该代码,然后查看填充是否在那里。
您可以通过重新启动内核并在 #
前面添加 %matplotlib ipympl
来注释第一行并重新运行代码来验证是否已完成此操作。它应该回到内联模式,其中 bbox_inches
为 tight
,这样最左边的图就紧贴左边框。
bbox_inches='tight'
由于内联设置
bbox_inches
默认为tight
,您可以继续使用内联后端;但是,请将其配置为不设置为 tight
。
因此,在你的笔记本中创建一个新单元并运行以下命令:
%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}`
运行后,按原样尝试原始代码块,您现在应该看到填充。
归属:
基于评论和底部的答案,其中特别提到了“内联后端”和这里的答案“在 ipython 笔记本中使用 matplotlib 内联时如何禁用 bbox_inches='tight'”