2011-02-17 25 views
6

Usando Matplotlib a través de la API OO es bastante fácil para un backend no interactivo:figura interactiva con OO Matplotlib

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') 

Pero si intento y repetir algo similar con backends interactivos, que fallan miserablemente (lo que pueda' t incluso obtener la figura interactiva para aparecer en primer lugar). ¿Alguien tiene algún ejemplo de usar Matplotlib a través de la API de OO para crear figuras interactivas?

Respuesta

7

¡Bien, necesitas usar un backend que soporte la interacción!

backend_agg no es interactivo. backend_tkagg (o uno de los otros backends similares) es.

Una vez que estés utilizando un backend interactiva, que tiene que hacer algo más parecido a esto:

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() 

Honestamente, sin embargo, esto no es la manera de utilizar la interfaz oo. Si usted va a necesitar parcelas interactivos, hacer algo de la misma familia:

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

usted todavía está utilizando la interfaz oo, sólo estás dejando pyplot mango crear el gestor de figura y entrar en la interfaz gráfica de usuario para usted mainloop .

Cuestiones relacionadas