Matplotlib 什么是子零?(缺少文件) 我的问题
我想知道matplotlib的Matplotlib 什么是子零?(缺少文件) 我的问题,matplotlib,Matplotlib,我想知道matplotlib的SubplotZero()函数的作用,因为它在matplotlib的文档中没有引用,但至少在matplotlib的三个示例中使用过(例如)。此外,由于文件中未提供,是否建议安全使用?或者是否存在在未来版本的matplotlib中删除的风险 上下文 我想用matplotlib绘制一个显示“零”轴的绘图。matplotlib的Examples页面中显示了此类绘图的示例。这件事就这样结束了 ax.axis["xzero"].set_visible(True) 然而,写
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工具包,因此不应更改为无关的内容。基本上已经显示了如何对“正常”轴执行相同的操作(并显示在中)。也就是说,欢迎您对文档提出改进建议。请参阅关于如何执行此操作的。简而言之,这将通过创建问题或直接向上拉取请求来完成。哦,好的,明白了!