Matplotlib 什么是子零?(缺少文件) 我的问题

Matplotlib 什么是子零?(缺少文件) 我的问题,matplotlib,Matplotlib,我想知道matplotlib的SubplotZero()函数的作用,因为它在matplotlib的文档中没有引用,但至少在matplotlib的三个示例中使用过(例如)。此外,由于文件中未提供,是否建议安全使用?或者是否存在在未来版本的matplotlib中删除的风险 上下文 我想用matplotlib绘制一个显示“零”轴的绘图。matplotlib的Examples页面中显示了此类绘图的示例。这件事就这样结束了 ax.axis["xzero"].set_visible(True) 然而,写

我想知道matplotlib的
SubplotZero()
函数的作用,因为它在matplotlib的文档中没有引用,但至少在matplotlib的三个示例中使用过(例如)。此外,由于文件中未提供,是否建议安全使用?或者是否存在在未来版本的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
相反,如示例所示,我们应该编写(注意:实际上还有另一种方法可以实现相同的结果:参见@ImportanceOfBeingErnest的答案)

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()
函数做了什么,以及它为什么首先存在(毕竟为什么需要它?)。所以我去查看文档,意识到它不是文档的一部分


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

哇,这里有三个问题

SubplotZero()
文档在哪里? 它目前没有文档记录,因为它是一个
AxesZero
,通过

SubplotZero = matplotlib.axes.subplot_class_factory(AxesZero)
AxesZero
也没有文档记录,但至少出现在文档中。 一般来说,完整的
mpl_工具包.axisartist
的文档非常缺乏,并且在当前文档中完全缺失。但我们可以提到一个或另一个

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

类型错误的原因是什么?
错误
TypeError:“method”对象不可下标
告诉您无法为方法编制索引

这里发生这种情况是因为
SubplotZero
,它是一个
mpl\u工具包.axisartist.axislines.AxesZero
,与“通常的”
matplotlib.axes.axes
完全不同。前者将其各个轴作为字典的一部分提供,可以通过
ax.axis[“xzero”]
访问字典。后者是一种方法,需要调用它并对轴进行一些修改,例如
ax.axis(“off”)
关闭轴。确实很不幸,它们都有一个属性
axis
,最终指向完全不同的事物

如何在零位置创建轴? 虽然
mpl_toolkits.axisartist
模块提供了引用的中所示的功能,但无可否认,该模块的使用(由于缺少/不完整的文档)相当麻烦

另一种方法是使用常用的
matplotlib.axes.axes
。要将脊椎定位在零位置,可以参考

要重新创建xaxis脊椎处于零y位置的链接示例,例如

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

完整示例:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.set_title('x axis spine at zero data coordinate')
x = np.arange(0, 2*np.pi, 0.01)
ax.plot(x, np.sin(x))
ax.set_xlabel("Axes zero")

ax.spines['bottom'].set_position(('data', 0))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.show()

除了下面的答案之外,您可能还会发现github repo中代码中的注释对于理解
子批零
与正常
实例的不同非常有用:请注意,我从来没有说过不建议使用AxisArtister。我说的是它(特别是对于新用户)通常很难使用。太棒了!也许我应该考虑把MaTopTLI.ORG上的例子改为类似于你的建议。您知道我是否可以这样做吗?如果可以,怎么做?这些示例是
axisartist
文档的一部分,并显示在中。它们的目的是展示如何使用AxisArtister工具包,因此不应更改为无关的内容。基本上已经显示了如何对“正常”轴执行相同的操作(并显示在中)。也就是说,欢迎您对文档提出改进建议。请参阅关于如何执行此操作的。简而言之,这将通过创建问题或直接向上拉取请求来完成。哦,好的,明白了!