什么是SubplotZero? (文件缺乏)

时间:2018-06-11 12:54:09

标签: matplotlib

我的问题

我想知道matplotlib的SubplotZero()函数做了什么,知道matplotlib的文档中没有引用它,但至少在matplotlib的website here中使用了三个例子。例如)。此外,由于文档中没有它,建议使用安全吗?或者在matplotlib的未来版本中是否存在可能被删除的风险?

上下文

我想用matplotlib绘制一个显示“零”轴的图。这些图的示例显示在matplotlib的examples页面中。这是通过

完成的
ax.axis["xzero"].set_visible(True)

然而,写作

ax = plt.gca()
ax.axis["xzero"].set_visible(True)

产生错误

ax.axis["xzero"].set_visible(True)
TypeError: 'method' object is not subscriptable

相反,如示例中所示,应该写一个(注意:实际上有另一种方法可以实现相同的结果:请参阅@ExitanceOfBeingErnest的答案)

from mpl_toolkits.axisartist.axislines import SubplotZero
fig = plt.figure()
ax = SubplotZero(fig, 1, 1, 1)
fig.add_subplot(ax)
ax.axis["xzero"].set_visible(True)
确实有效。但是,我很想知道SubplotZero()函数的作用,以及为什么它首先存在(毕竟为什么它需要它?)。所以我去查看文档并意识到它不是它的一部分!

有人知道这些问题的答案吗?

1 个答案:

答案 0 :(得分:1)

哇,所以这里有三个问题。

SubplotZero()文档在哪里?

它目前没有记录,因为它是AxesZero,通过

增加到子图状态
SubplotZero = matplotlib.axes.subplot_class_factory(AxesZero)

AxesZero也没有记录,但至少会出现在文档中。 通常,完整的mpl_toolkits.axisartist文档记录很少,并且在当前文档中完全缺失。但有人可以提到older versioncurrent devdocs

在将来的版本中不应删除它。

TypeError

的原因是什么?

错误TypeError: 'method' object is not subscriptable告诉您无法索引方法。

此处发生这种情况,因为axis的{​​{1}}是SubplotZero,与"通常"完全不同。 mpl_toolkits.axisartist.axislines.AxesZero。前者提供其各自的轴作为字典的一部分,可以作为matplotlib.axes.Axes访问。后者是一种方法,需要调用并对轴进行一些修改,例如: ax.axis["xzero"]关闭轴。确实非常不幸的是,他们都有一个属性ax.axis("off"),最后提到完全不同的东西。

如何在零位置创建轴?

虽然axis模块提供了引用example中所示的此功能,但无可否认地使用此模块(由于缺少/不完整的文档)相当麻烦。

另一种方法是使用通常的mpl_toolkits.axisartist。要将脊椎定位在零位置,可以参考Spine placement demo

要在零y位置重新创建具有x轴脊柱的链接示例,可以例如做

matplotlib.axes.Axes

使用普通ax.spines['bottom'].set_position(('data', 0)) 实例matplotlib.axes.Axes

完整示例:

ax

enter image description here