Python:当我没有导入命令时,为什么这个命令有效

时间:2018-05-18 15:09:03

标签: python matplotlib

我第一次编写Python GUI来绘制一些数据,并导入了以下模块/命令来执行此操作

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.ttk import *

import matplotlib
matplotlib.use('TkAgg')

from matplotlib.cm import get_cmap
from matplotlib.pyplot import figure
from scipy.interpolate import griddata
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

在互联网上搜索,我发现了一些能够将我的绘图嵌入GUI中的代码:

fig = figure()
fig.add_subplot(111).pcolormesh(X, Y, Z, cmap = get_cmap('BuPu'))

canvas = FigureCanvasTkAgg(fig, master = window)  # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side = TOP, fill = BOTH, expand = 1)

我的问题是为什么当我没有从matplotlib.pyplot导入该命令时,pcolormesh在上面的第二行中工作?我是Python的新手,我确定我错过了一些东西,但如果我想在过去使用pcolormesh命令,我必须导入它。感谢。

1 个答案:

答案 0 :(得分:1)

您的函数调用创建的对象,这些对象具有方法。您不需要导入这些方法,因为它们直接附加到对象。它们与导入函数不同,因为您无法直接访问这些方法:它们只能从对象访问。

设置fig = figure()时,您创建了一个对象。如果您print(repr(fig)),您会看到类似的内容。

'<matplotlib.figure.Figure object at 0x000000000784F208>'

所以figFigure个对象。此对象附带了一些附加的方法和属性。您可以使用dir(fig)获取所有方法的列表(这是一个很长的列表,因此我不会在此处打印)。

fig.subplot(111)调用附加到subplot对象的fig方法。它返回一个新对象(AxesSubplot)。 对象附加了一个名为pcolormesh的方法。如果你想玩这个对象,你可以这样做。

ax = fig.subplot(111)
ax.pcolormesh(X, Y, Z, cmap = get_cmap('BuPu'))
print(repr(ax))

除了做你的东西,这将打印<matplotlib.axes._subplots.AxesSubplot at 0x8996f28>

我记得当我刚开始时被matplot.pyplot搞得同样困惑,因为你经常可以用函数(matplotlib.pyplot.pcolomesh)和对象的方法做几乎相同的事情(在上面的例子中,{{ 1}})。他们在API说明herehere中提到了它。