generar gráficas (3D) desde python

Daniel Garcia Moreno dani en danigm.net
Jue Mar 12 10:41:22 CET 2009


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/html/
> > > > > >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.


------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: Esta parte del mensaje está firmada	digitalmente
URL: <http://mail.python.org/pipermail/python-es/attachments/20090312/9511eca4/attachment.pgp>
------------ 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