Python: почему эта команда работает, когда я не импортировал команду - PullRequest
0 голосов
/ 18 мая 2018

Я впервые пишу графический интерфейс Python для отображения некоторых данных и для этого импортировал следующие модули / команды

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

В Интернете я нашел код, который работал дляполучить мой график, встроенный в графический интерфейс:

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)

Мой вопрос: почему pcolormesh работает во второй строке выше, когда я не импортировал эту команду из matplotlib.pyplot?Я новичок в Python, и я уверен, что что-то упустил, но если в прошлом я хотел использовать команду pcolormesh, мне пришлось ее импортировать.Спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

Ваша функция вызывает созданные объекты, и у этих объектов есть методы.Вам не нужно импортировать эти методы, так как они прикреплены непосредственно к объекту.Они отличаются от импорта функции тем, что у вас нет прямого доступа к этим методам: доступ к ним возможен только из объекта.

когда вы установите 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) и как метода объекта (в приведенном выше примере ax.pcolormesh).Они упоминают это в объяснении API здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...