代码之家  ›  专栏  ›  技术社区  ›  Gael Lorieul

什么是subblotzero?(缺少文件)

  •  1
  • Gael Lorieul  · 技术社区  · 8 年前

    我的问题

    我想知道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
    

    相反,正如例子中所示,人们应该写一个例子。 (注:其实还有另一种方法可以达到同样的效果:见@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)
    

    确实有效。但是,我很想知道 子批零() 函数做到了,为什么它一开始就存在(毕竟为什么需要它?)所以我去查看文档,发现它不是它的一部分!

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   ImportanceOfBeingErnest    8 年前

    哇,这里有三个问题。

    哪里是 SubplotZero() 文档?

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

    SubplotZero = matplotlib.axes.subplot_class_factory(AxesZero)
    

    斧零 也没有文档记录,但至少出现在文档中。 总的来说 mpl_toolkits.axisartist 文件记录很差,在当前文件中完全缺失。但也可以指 older version current devdocs .

    在以后的版本中不应该删除它。

    为什么 TypeError ?

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

    这发生在这里 axis A的 SubplotZero ,这是一个 mpl_toolkits.axisartist.axislines.AxesZero ,与“平常”完全不同 matplotlib.axes.Axes . 前者提供它的单个轴作为字典的一部分,它可以被访问为 ax.axis["xzero"] . 后者是一种方法,需要调用它并对轴进行一些修改,例如。 ax.axis("off") 关闭轴。他们两个都有一个特点,真是很不幸 ,最后提到完全不同的东西。

    如何在零位置创建轴?

    mpl_工具包.axisArtist 模块提供了如下所示的功能 example ,使用该模块是公认的(由于缺少/不完整的文档)相当麻烦。

    另一种选择是使用普通的 matplotlib.axes.axes轴 . 把脊柱放在零位可以参考 Spine placement demo .

    要重新创建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()
    

    enter image description here