在 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 supported: Artist
只能容纳一个 Axes
.
中使用的必要转换
当用户尝试将已与 Axes
对象关联的 Artist
添加到另一个 Axes
对象时,matplotlib 的未来版本将 raise an exception。
我有一个 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 supported: Artist
只能容纳一个 Axes
.
当用户尝试将已与 Axes
对象关联的 Artist
添加到另一个 Axes
对象时,matplotlib 的未来版本将 raise an exception。