2012-01-15 15 views
6

Estoy interesado en usar python para hacer diagramas que representen el tamaño de los valores en función del tamaño de los cuadrados (y opcionalmente su color). Básicamente estoy buscando una manera de hacer una visión general de un conjunto de valores como el antiguo programa windirstat con el uso del disco duro (básicamente hace un cuadrado grande que representa tu disco duro y luego cuadrados más pequeños que forman el área dentro de él representando diferentes programas, cuanto más grande sea el cuadrado, más grande será el archivo, el color indicará el tipo de archivo). Estoy bastante familiarizado con matplotlib, y no creo que sea posible hacer algo como esto con él. ¿Hay algún otro paquete de Python que pueda ayudar? ¿Alguna sugerencia para algo más bajo si no es así? Creo que podría hacerlo manualmente si pudiera encontrar una manera de dibujar los cuadros programáticamente (realmente no me importa el formato, pero la opción de exportar SVG y PNG sería agradable).Python graph like windirstat?

En última instancia, sería bueno tenerlo interactivo como windirstat, donde si pasas el cursor sobre un cuadrado en particular, obtienes más información sobre él, y si haces clic en él, podrías entrar y ver la composición de ese cuadrado en particular. Solo estoy familiarizado con wxpython para las cosas de GUI, no estoy seguro si podría usarse para algo como esto. Por ahora, me encantaría solo darles salida.

¡Muchas gracias! Alex

Edit: Gracias chicos, sus respuestas ayudaron mucho.

+2

"Estoy bastante familiarizado con matplotlib, y no creo que sea posible hacer algo como esto con él". ¿Cuáles serían las limitaciones de matplotlib? Creo que podría dibujar cuadrados de diferentes tamaños ... – joaquin

+0

Bueno, supongo que estoy buscando algo así como un diagrama de Hinton, que [MatPlotLib puede dibujar] (http://www.scipy.org/Cookbook/Matplotlib/HintonDiagrams) , pero sin los espacios entre las cajas. Sería más como un gráfico circular, pero cuadrado. –

Respuesta

7

Está buscando Treemapping algoritmos. Una vez implementado, puede transformar los resultados (que deben ser rectángulos) en comandos de trazado para cualquier cosa que pueda dibujar rectángulos en capas.

Editar:

Más enlaces e información:

Si no te importa la lectura de documentos, el d3 biblioteca basada en navegador prevé diagramas de árbol '' (squarified js implementation). Ellos hacen referencia a este documento por Bruls, Huizing, and van Wijk. (Esta es también la cita 3 en el artículo de wikipedia)

Buscaría en los algoritmos enumerados en el artículo de Wikipedia vinculado. Por ejemplo, también se vinculan al artículo this, que describe un algoritmo para "mapas mixtos de árbol". El documento también incluye algunas porciones interesantes al final que describen transformaciones en formas distintas de las rectangulares.

Squarified ciertamente parece ser la variedad más común. Los enlaces anteriores le deben dar lo suficiente como para trabajar en una solución o, incluso, portar directamente la implementación de d3. Sin embargo, el costo del modelo de Grokking d3 (que es algo así como una forma declarativa de jQuery) puede ser algo alto. A primera vista, sin embargo, la implementación parece relativamente sencilla.

+0

Bien, sí, creo que Treemapping es exactamente lo que estoy buscando. [Esta lista] (http://en.wikipedia.org/wiki/List_of_treemapping_software) parece ser de propiedad exclusiva, ¿sabes si hay alguna opción de código abierto? –

1

Squaremap hace esto. No lo he usado (solo lo sé de RunSnakeRun) y su documentación es muy deficiente, pero parece funcionar.

+0

Gracias que se parece a lo que estoy buscando y lo he descargado, pero tiene razón, la documentación es bastante ... inexistente. –

+0

Intenta descifrar la fuente RunSnakeRun, o tal vez contactando al autor. Puede ser mucho trabajo, pero probablemente no tanto como escribir lo mismo por su cuenta, y tal vez incluso pueda mejorar la situación una vez que comprenda el código. –