在 iPython 笔记本中两次向内联轴添加 matplotlib 补丁会导致偏移

Adding a matplotlib patch to inline axis twice in an iPython notebook causes offset

我有一个 matplotlib patch,我想将其添加到两个不同的 axis 对象。第一次调用 ax1.add_patch(my_patch) 会得到正确的结果,但是当我调用 ax2.add_patch(my_patch) 时,补丁会水平偏移。之后再次调用 add_patch 不会更改偏移量。

这似乎只有在使用 %matplotlib inline 时才会发生。单独生成数字 windows 不会导致偏移。

在使用 %matplotlib inline 时,我可以做些什么来避免偏移?

最小示例:

import numpy as np
from matplotlib.patches import Circle
import matplotlib.pyplot as plt

%matplotlib inline

grid = np.ones([10,10])
circle = Circle((5,5), 2)

fig1, ax1 = plt.subplots()
ax1.imshow(grid, interpolation='None')
ax1.add_patch(circle)

fig2, ax2 = plt.subplots()
ax2.imshow(grid, interpolation='None')
ax2.add_patch(circle)

发生这种情况是因为将相同的 patch(或者更一般地说,相同的 Artist)添加到多个 Axes is not supportedArtist 只能容纳一个 Axes.

中使用的必要转换

当用户尝试将已与 Axes 对象关联的 Artist 添加到另一个 Axes 对象时,matplotlib 的未来版本将 raise an exception