Интерактивная фигура с О.О. Матплотлиб - PullRequest
7 голосов
/ 17 февраля 2011

Использование Matplotlib через OO API достаточно просто для неинтерактивного бэкэнда:

 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
 from matplotlib.figure import Figure

 fig = Figure()
 canvas = FigureCanvas(fig)
 ax = fig.add_subplot(1,1,1)
 ax.plot([1,2,3])
 canvas.print_figure('test.png')

Но если я пытаюсь повторить что-то подобное с интерактивными бэкэндами, я с треском проваливаюсь (даже не могу получитьинтерактивная фигура, чтобы появиться в первую очередь).У кого-нибудь есть примеры использования Matplotlib через OO API для создания интерактивных фигур?

1 Ответ

8 голосов
/ 17 февраля 2011

Ну, вам нужно использовать бэкэнд, который поддерживает взаимодействие!

backend_agg не является интерактивным. backend_tkagg (или один из других подобных бэкэндов).

Как только вы используете интерактивный бэкэнд, вам нужно сделать что-то более похожее на это:

import matplotlib.backends.backend_tkagg as backend
from matplotlib.figure import Figure

manager = backend.new_figure_manager(0)
fig = manager.canvas.figure
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
fig.show()
backend.show()

Честно говоря, это не способ использовать интерфейс oo. Если вам понадобятся интерактивные сюжеты, сделайте что-то вроде этого:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.show()

Вы по-прежнему используете интерфейс oo, вы просто позволяете pyplot создать менеджер фигур и ввести для вас графический интерфейс gui.

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