我想使用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)
答案 0 :(得分:2)
使用subplots_adjust
朝正确的方向发展。此后请勿使用tight_layout
,因为这将覆盖通过subplots_adjust
完成的所有设置。
您可能决定选择类似的东西
fig.subplots_adjust(left=0.2, bottom=0.2)
在图的左下角为插图留出一些空间。
然后您需要定位插图。由于您是在左下角工作,因此这相对容易。 loc
参数需要设置在左下角,您可能会停留在bbox_to_anchor=(0,0)
位置。然后只需通过borderpad=3
添加一些填充(以字体大小为单位),以使插入轴的标签仍然可见,
zoomed_inset_axes(ax, 2, loc='lower left', bbox_to_anchor=(0,0), borderpad=3)
完整代码:
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)
fig, ax = plt.subplots(1, figsize=(10,6))
fig.subplots_adjust(left=0.2, bottom=0.2)
ax.scatter(X,Y)
# # Setup zoom window
axins = zoomed_inset_axes(ax, 2, loc='lower left', bbox_to_anchor=(0,0), borderpad=3)
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)
#fig.savefig('test.png', dpi=70)
plt.show()
通常,您有很多选择来定位和调整插图的大小。我最近在matplotlib页面上创建了一个新示例:Inset Locator Demo,该示例当前仅在devdocs中可用,以显示不同参数之间的相互作用(在这种情况下,inset_axes
–但完全适用于zoomed_inset_axes
)。