我有一个关于matplotlib的问题 - pyplot教程,链接在这里 我是一个本地荷兰语,可以阅读标准英语.我的问题不是关于一个不起作用的例子,而是关于文本.在pyplot_tutorial章节中,使用多个数字和轴,它们使用有状态和有状态的单词.我不明白他们的意思.我们在荷兰语中没有一句话.我在互联网上搜索,但我没有找到任何东西.我认为有状态意味着使用所有可能性完成.
我希望有人能给我一个答案.我知道这不是一个问题,因为它不是关于编程,但我不知道在哪里可以问它.
DrV*_*DrV 12
在这种情况下,可以通过简单的绘图示例最好地理解差异.
首先是有状态的例子:
import matplotlib.pyplot as plt
plt.figure()
plt.plot([0,1], [1,0])
Run Code Online (Sandbox Code Playgroud)
然后是无状态(或者说面向对象的方法):
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
li = ax.plot([0,1], [1,0])
Run Code Online (Sandbox Code Playgroud)
这些步骤执行相同的步骤:
matplotlib.figure.Figure)matplotlib.axes.AxesSubplot)并将其添加到图中matplotlib.lines.Line2D)在面向对象的形式,我们做上述操作相当明确,并采取了对象引用到变量(fig,ax,li).引用也不会在有状态接口中丢失,但它们隐藏在某个地方matplotlib.
当我们尝试改变某些属性(例如图的大小)时,这种差异变得明显.使用OO方法:
fig.set_size_inches([10, 8])
Run Code Online (Sandbox Code Playgroud)
通过有状态的方法,我们首先需要找到这个数字.有一个功能; plt.gcf.所以:
plt.gcf().set_size_inches([10,8])
Run Code Online (Sandbox Code Playgroud)
几乎是一回事.在我们同时打开多个数字的情况下,"几乎"部分变得非常重要.plt.gcf返回'当前'数字,但很难分辨哪一个是当前数字.
轴或线重复相同的情况.如果我们想调整图的x刻度,那么:
ax.set_xticks([0,.5,1])
Run Code Online (Sandbox Code Playgroud)
很简单.随着有状态的方法,它变成:
plt.gca().set_xticks([0, .5, 1])
Run Code Online (Sandbox Code Playgroud)
其中gca()返回'当前'轴.如果你有几个子图,这变得非常复杂.
所以,问题是谁持有这些物品.有状态接口只是面向对象信息的一个薄包装器.所有参数都在对象中,并且在一个图中有许多对象(数百甚至数千).
有状态接口的matplotlib一点是它经常用于pylab运行IPython.这给出了有状态接口以及一些带有命名空间的快捷方式.绘制正弦曲线就像:
x = linspace(0, 2*pi, 100)
plot(x, sin(x))
Run Code Online (Sandbox Code Playgroud)
这可以说比以下更简单:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
fig = plt.figure()
ax = fig.add_subplot(111)
li = ax.plot(x, np.sin(x))
Run Code Online (Sandbox Code Playgroud)
但是,尽管提供的快捷方式pylab对于交互式工作非常方便,但它在脚本中并不好.我也使用pylab,但是我在matplotlib相关答案中以面向对象的形式展示了几乎所有的例子,因为它更加透明.
在这种情况下,状态类似于内存。
你可以用一个类比来思考它:
无国籍人对自己从一项任务到下一项任务的生活没有记忆。
一个有状态的人有记忆/记录他们从一项任务到下一项任务的生活。
在您的情况下,无状态意味着绘制值时不参考过去的值。
通过有状态,库可以跟踪或记住绘制的过去值。
这避免了过多的内存消耗和进程开销。