我第一次编写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命令,我必须导入它。感谢。
答案 0 :(得分:1)
您的函数调用创建的对象,这些对象具有方法。您不需要导入这些方法,因为它们直接附加到对象。它们与导入函数不同,因为您无法直接访问这些方法:它们只能从对象访问。
设置fig = figure()
时,您创建了一个对象。如果您print(repr(fig))
,您会看到类似的内容。
'<matplotlib.figure.Figure object at 0x000000000784F208>'
所以fig
是Figure
个对象。此对象附带了一些附加的方法和属性。您可以使用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说明here和here中提到了它。