3

尝试绘制箭头时,我在 matplotlib 中发现了一种罕见的行为。如果你制作如下图:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

arrow = patches.FancyArrow(0.,0.,0.4,0.6)

fig = plt.figure(1)
ax1  = fig.add_subplot(121)
ax2  = fig.add_subplot(122)

ax1.add_line(arrow)
plt.show()

您将在第一个轴上完美地看到箭头。但是当试图在第二个轴上添加相同的箭头时:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

arrow = patches.FancyArrow(0.,0.,0.4,0.6)

fig = plt.figure(1)
ax1  = fig.add_subplot(121)
ax2  = fig.add_subplot(122)

ax1.add_line(arrow)
ax2.add_line(arrow)

plt.show()

你会注意到箭头没有被绘制出来。

如果我们尝试制作相同的图形,但现在使用箭头对象的不同副本:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

arrow1 = patches.FancyArrow(0.,0.,0.4,0.6)
arrow2 = patches.FancyArrow(0.,0.,0.4,0.6)

fig = plt.figure(1)
ax1  = fig.add_subplot(121)
ax2  = fig.add_subplot(122)

ax1.add_line(arrow1)
ax2.add_line(arrow2)

plt.show()

可以看到两个箭头,每个面板中都有一个。因此,似乎不同的方法和对象之间存在依赖关系。有人知道这里发生了什么吗?FancyArrow 是越野车吗?谢谢。

4

1 回答 1

1

它们表现得很好,你只是用错了,你不能将同一个艺术家对象添加到多个axes[将来,这将由库强制执行]。

当您将艺术家添加到轴上时,会有artist一些内部结构和碎片。axes例如get_axes返回axes其中的内容Artist,如果您将其添加到多个轴,这将变得棘手(ier)来跟踪。

这与为什么在图形之间移动轴很难(在创建 matplotlib.figure.Figure 数组后,如何将它们绘制为 One figure 的子图?以及如何将 matplotlib Figure 对象包含为子图?

于 2013-08-01T01:46:08.363 回答