2011-08-23 22 views
39
>>> import matplotlib 
>>> print matplotlib.rcsetup.all_backends 
[u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'Qt5Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'nbAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template'] 

¡Mire todos esos backends!backends matplotlib - ¿me importa?

¿Debo cuidar qué back-end está en uso? p.ej. si desarrollé y pruebo mis cosas usando solo el back-end TkAgg, y alguien más que use mi código podría estar usando GTKAgg backend en su sistema, puede que mis cosas se rompan para ellos de una manera que no habría notado, o se requieren todos los back-ends para más o menos "trabajar" de la misma manera?

+1

Ya he tenido algunos problemas con los eventos de doble clic y triple clic que se manejan de forma diferente en diferentes backends, así que sé que hay algunas diferencias. Me interesa si hay algunos inconvenientes serios para tener cuidado. – wim

Respuesta

37

El backend importa principalmente si está integrando matplotlib en una aplicación, en cuyo caso necesita usar un backend (GTK, Qt, TkInter, WxWindows) que coincida con el kit de herramientas que está utilizando para compilar su aplicación. Si también está utilizando matplotlib de una manera interactiva simple, también querrá utilizar un backend que coincida con lo que está disponible en su máquina (GTK si está ejecutando Gnome, Qt si está ejecutando KDE, etc.) (aunque la mayoría de las bibliotecas ya están instaladas en la mayoría de las máquinas)

La parte de la capa de dibujo del backend (Cairo, Agg ...) también importa en términos de funcionalidades: puede elegirla dependiendo de lo que esa capa proporcione en comparación con su las necesidades de la aplicación (anti aliasing, canal alfa, formatos de exportación ...). Entonces, si desarrollas y pruebas usando TkAgg y otras personas corren con, p. TkCairo, algunas cosas podrían no funcionar. OTOH, corriendo con QtAgg ciertamente funcionaría de una manera muy similar siempre y cuando te apegues a la API matplotlib y no lances en la capa envuelta del juego de herramientas.