jupyter笔记本删除matplotlib的左侧空白

问题描述 投票:0回答:1

以下代码应显示“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()
会产生左侧空白(笔记本内的甚至)我怀疑笔记本的渲染有问题,但我不知道确切的设置。

以下是 Jupyter Notebook 显示的内容:enter image description here

以下是在 .py 脚本文件中运行的相同代码显示的内容:enter image description here

背景

我正在迭代一些数据,想要显示 2×2 的多个图,在奇数配对上,我想显示居中的单个图,并关闭第二个空图。这个想法是使用

.subplots(nrows=1,ncols=2)
(因为我没有其他想法)并使用
ax.set_position()
将第一个图向右偏移。事实证明它不起作用。

python matplotlib jupyter-notebook
1个回答
0
投票

如今,如果您不指定任何内容,那么

%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'”

© www.soinside.com 2019 - 2024. All rights reserved.