使用 zoomed_inset_axes 截断框

Suu*_*hgi 4 python matplotlib

我想使用,zoomed_inset_axes但盒子一旦通过主要人物的框架就会被截断。我无法变得更好

  • f.tight_layout()
  • f.subplots_adjust(bottom=...)
  • 'figure.autolayout': True
  • 甚至没有使用f.text外部某处的隐藏(白色)文本。

有谁知道如何正确地做到这一点?

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes, mark_inset

X = np.random.normal(.5,10,1000)
Y = np.random.normal(.5,10,1000)

f, ax = plt.subplots(1, figsize=(10,6))

ax.scatter(X,Y)

# # Setup zoom window
axins = zoomed_inset_axes(ax, 2, loc="center", bbox_to_anchor=(0,0))
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
axins.set_xlim([-15,0])
axins.set_ylim([-12,-3])

# # Plot zoom window
axins.scatter(X,Y)

f.tight_layout()
f.savefig('test.png', dpi=70)
Run Code Online (Sandbox Code Playgroud)

插图被截断

Imp*_*est 5

使用subplots_adjust朝着正确的方向发展。之后不要使用tight_layout,因为这会覆盖通过subplots_adjust.

您可以决定选择类似的东西

fig.subplots_adjust(left=0.2, bottom=0.2)
Run Code Online (Sandbox Code Playgroud)

为图左下角的插图留出一些空间。

然后你需要定位插图。由于您在左下角工作,因此这相对容易。该loc参数需要设置在左下角,您可能会坚持该bbox_to_anchor=(0,0)位置。然后只需通过borderpad=3(以字体大小为单位)添加一些填充,这样插入轴的标签仍然可见,

zoomed_inset_axes(ax, 2, loc='lower left', bbox_to_anchor=(0,0), borderpad=3)
Run Code Online (Sandbox Code Playgroud)

完整代码:

fig.subplots_adjust(left=0.2, bottom=0.2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

一般来说,您有很多选项来定位和调整插图的大小。我最近在 matplotlib 页面上创建了一个新示例:Inset Locator Demo,目前仅在 devdocs 中可用,以显示不同参数之间的相互作用(在这种情况下inset_axes- 但它完全适用于zoomed_inset_axes)。