generar gráficas (3D) desde python

Inigo Aldazabal Mensa inigo_aldazabal en ehu.es
Jue Mar 12 11:00:40 CET 2009


El Jueves, 12 de Marzo de 2009 10:41, Daniel Garcia Moreno escribió:
> El jue, 12-03-2009 a las 09:38 +0100, Inigo Aldazabal Mensa escribió:
> > El Miércoles, 11 de Marzo de 2009 19:20, Daniel Garcia Moreno escribió:
> > > On Wed, 2009-03-11 at 16:36 +0100, Inigo Aldazabal Mensa wrote:
> > > > El Miércoles, 11 de Marzo de 2009 16:26, Inigo Aldazabal Mensa
> >
> > escribió:
> > > > > El Miércoles, 11 de Marzo de 2009 09:26, Daniel Garcia Moreno
> >
> > escribió:
> > > > > > El mar, 10-03-2009 a las 18:58 +0100, jordi torrents escribió:
> > > > > > > Hola,
> > > > > > >
> > > > > > > El 10/03/2009, a las 18:04, Daniel Garcia Moreno
> > > > > > > <dani en danigm.net>
> > > > >
> > > > > escribió:
> > > > > > > >> Hola, estoy buscando algún módulo para generar gráficas
> > > > > > > >> en formato imagen (png,jpg,ppm...) de manera más o menos
> > > > > > > >> simple.
> > > > > > > >>
> > > > > > > >> He probado pychart, pero no se pueden generar gráficas de
> > > > > > > >> barras 3D. También he estado mirando dislin pero parece
> > > > > > > >> bastante complicado de instalar en linux.
> > > > > > > >>
> > > > > > > >> ¿Alguien conoce algún módulo que haga gráficas 3D?
> > > > > > >
> > > > > > > Puedes probar matplotlib [1]. Hay buena documentación y un
> > > > > > > montón de ejemplos en su web. También hay un cookbook muy
> > > > > > > interesante en el web de scipy referente a gráficos con
> > > > > > > matplotlib [2]. Mirando por encima veo que hay una entrada
> > > > > > > para gráficos en 3d [3], pero según el web no funciona con
> > > > > > > las versiones más nuevas de matplotlib (tiene que ser <
> > > > > > > 0.91). Ahí mismo recomiendan Mayavi2 [4] que quizá también
> > > > > > > te sea útil.
> > > > > > >
> > > > > > > Salut!
> > > > > > >
> > > > > > > [1] http://matplotlib.sourceforge.net/
> > > > > > > [2] http://www.scipy.org/Cookbook/Matplotlib/
> > > > > > > [3] http://www.scipy.org/Cookbook/Matplotlib/mplot3D
> > > > > > > [4]
> > > > > > > http://code.enthought.com/projects/mayavi/docs/development/h
> > > > > > >tml/ maya vi /mlab.html
> > > > > >
> > > > > > Muchas gracias a todos por la información, voy a mirar a ver
> > > > > > si consigo hacer algún ejemplo.
> > > > >
> > > > > mmm los que se  mencionan arriba están mas bien orientados a
> > > > > visualización 3D de datos volumétricos, superficies y cosas así 
> > > > > en el apartado 3D. matplotlib sí hace barras y similares, pero
> > > > > solo en 2D.
> > > > >
> > > > > Si estás buscanodo algo tipo lo que hace el excel en 3D, por
> > > > > ejemplo, no creo que te sirvan. Realmente no conozco ninguno
> > > > > módulo que haga eso.
> > > > >
> > > > > Un saludo.
> > > >
> > > > Se me ocurre que OpenOffice sí hace ese tipo de cosas. Podrías
> > > > mirar de hacerlo a través de UNO[1].
> > > >
> > > > [1]http://udk.openoffice.org/
> > >
> > > Realmente lo que quiero hacer es añadir una gráfica a una
> > > presentación usando python UNO. Al final lo he hecho desde el mismo
> > > openoffice, abriendo un fichero plantilla de calc con la gráfica,
> > > cambiando los datos necesarios a través de pyuno, y con pyuno copio
> > > y pego en la presentación como si lo hiciera manualmente.
> > >
> > > Con python UNO se pueden hacer muchas cosas, pero la documentación
> > > es realmente mala. No he conseguido encontrar ni tan siquiera un
> > > listado de todas las funciones que puede recibir un dispatcher, he
> > > tenido que "intuir" el .uno:Copy y el .uno:Paste.ç
> >
> > Sería interesante ver como lo has hecho. ¿Lo has publicado en algún
> > sitio?
>
> No lo había publicado. He hecho un pequeño módulo que facilita la tarea
> de trabajar con pyuno, lo acabo de subir aquí:
>
> http://danigm.net/files/unoutils.py
>
>
> Lo he hecho así:
>     import unoutils
>     import os
>
>     p = unoutils.Presentation()
>     p.connect()
>     p.load(os.path.join(os.getcwd(), 'plantilla.odp'))
>     p.add()
>     slide = p.presentation.getCount() - 1
>
>     s = unoutils.Sheet()
>     s.connect()
>     s.load(os.path.join(os.getcwd(), 'evolucion.ods'))
>     s.get_sheet()
>
>     chart_args = {'pos': (1100, 9720), 'size': (12000, 7500)}
>     data1 = [79.7, 87.7, 75.2, 1,1,1, -546, 42.8, 45.7]
>     for i, c in enumerate(s.get_range("B2:D4")):
>         c.cell.Formula = data1[i]
>
>     x = s.sheet.getDrawPage()
>     y = x.getByIndex(0)
>     s.controller.select(y)
>     s.copy()
>     s.close()
>
>     page = p.get_page(slide)
>     p.controller.select(page)
>     p.controller.select(None)
>
>     p.frame.activate()
>     p.paste()
>
>     x = p.slide.getByIndex(p.slide.getCount() - 1)
>     x.Size = unoutils.Size(*chart_args['size'])
>     x.Position = unoutils.Point(*chart_args['pos'])
>
>
> evolucion.ods es una hoja de cálculo en la que hay una serie de datos,
> en el rango B2:D4 y una gráfica con estos datos.
> plantilla.odp es la plantilla de la presentación.

¡Muchas gracias por compartirlo!

------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es