gpt4 book ai didi

matplotlib - 什么是子图零? (缺乏文件)

转载 作者:行者123 更新时间:2023-12-03 23:54:43 26 4
gpt4 key购买 nike

我的问题

我想知道matplotlib的SubplotZero()是什么函数确实如此,知道它没有在 matplotlib 的文档中引用,但至少在 matplotlib website 的三个示例中使用(例如 here)。此外,由于文档中不存在它,是否推荐使用并且安全?还是有可能在 future 版本的 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_toolkits.axisartist 文档记录非常差,并且在当前文档中完全缺失。但是可以引用 older versioncurrent devdocs

在以后的版本中不应将其删除。
TypeError 的原因是什么?

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

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

如何在零位置创建轴?

虽然 mpl_toolkits.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

关于matplotlib - 什么是子图零? (缺乏文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50798265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com