2012-01-15 8 views
6

Sono interessato all'utilizzo di python per creare diagrammi che rappresentano la dimensione dei valori in base alla dimensione dei quadrati (e facoltativamente il loro colore). Fondamentalmente sto cercando un modo per fare panoramiche su un gruppo di valori come il buon vecchio programma windirstat con l'utilizzo del disco rigido (fondamentalmente fa un grande quadrato che rappresenta il tuo disco fisso e quindi quadrati più piccoli che costituiscono l'area al suo interno che rappresenta programmi diversi, più grande è il quadrato più grande è il file, il colore indica il tipo di file). Sono abbastanza familiare con matplotlib, e non penso che sia possibile fare qualcosa del genere con esso. C'è qualche altro pacchetto Python che potrebbe aiutare? Qualche suggerimento per qualcosa di più basso livello se non lo è? Immagino di poterlo fare manualmente se trovassi un modo per disegnare le scatole in modo programmato (non mi interessa davvero il formato, ma l'opzione per esportare SVG e PNG sarebbe bella).Grafico pitone come windirstat?

In definitiva, sarebbe bello essere interattivo come è windirstat, dove se si passasse il mouse su un particolare riquadro si ottengono maggiori informazioni su di esso, e se si fa clic su di esso forse si andrebbe a vedere il trucco di quella particolare piazza. Conosco solo wxpython per la GUI, non so se potrebbe essere usato per qualcosa di simile. Per ora sarei felice di averli appena usciti.

Grazie mille! Alex

Modifica: Grazie ragazzi, entrambe le vostre risposte hanno aiutato molto.

+2

"Sono abbastanza familiare con matplotlib, e non penso che sia possibile fare qualcosa del genere con esso." Quali sarebbero i limiti di matplotlib? Penso che potrebbe disegnare sqaures di dimensioni diverse ... – joaquin

+0

Beh, immagino che sto cercando qualcosa come un diagramma di Hinton, che [MatPlotLib può disegnare] (http://www.scipy.org/Cookbook/Matplotlib/HintonDiagrams) , ma senza gli spazi tra le scatole. Sarebbe più come un grafico a torta, ma quadrato. –

risposta

7

Stai cercando gli algoritmi Treemapping. Una volta implementato, è possibile trasformare l'output (che dovrebbe essere un rettangolo) in comandi di tracciamento per qualsiasi cosa possa disegnare rettangoli sovrapposti.

Edit:

Maggiori collegamenti e informazioni:

Se non ti dispiace aver letto le carte, il browser-based d3 biblioteca prevede treemaps 'squarified' (js implementation). Fanno riferimento a questo documento da Bruls, Huizing, and van Wijk. (Questa è anche la citazione 3 sull'articolo di Wikipedia)

Vorrei cercare sugli algoritmi elencati nell'articolo di Wikipedia collegato. Ad esempio, si collegano anche all'articolo this, che descrive un algoritmo per "treemaps misti". Il documento include anche alcune parti interessanti alla fine che descrivono le trasformazioni in forme diverse da quelle rettangolari.

Squarificato sembra essere la varietà più comune in circolazione. I link qui sopra dovrebbero darti abbastanza per lavorare verso una soluzione o, addirittura, portare direttamente l'implementazione d3. Tuttavia, il costo del modello di groking d3 (che è qualcosa come una forma dichiarativa di jQuery) potrebbe essere un po 'alto. A prima vista, tuttavia, l'implementazione sembra relativamente semplice.

+0

Bello, sì, penso che Treemapping sia esattamente quello che sto cercando. [Questa lista] (http://en.wikipedia.org/wiki/List_of_treemapping_software) sembra essere tutta roba proprietaria, sai se ci sono delle opzioni open source? –

1

Squaremap fa questo. Non l'ho usato (lo so solo da RunSnakeRun) e la sua documentazione è gravemente carente, ma sembra funzionare.

+0

Grazie che sembra quello che sto cercando e l'ho scaricato, ma hai ragione la documentazione è carina ... inesistente. –

+0

Prova a decifrare il sorgente RunSnakeRun o forse a contattare l'autore. Potrebbe essere un sacco di lavoro, ma probabilmente non tanto quanto scrivere la stessa cosa da soli - e forse puoi persino migliorare la situazione una volta compreso il codice. –