quindi la libreria che consiglio e utilizzo per il mio snippet di codice in questa risposta è non una libreria python, ma è una libreria python-friendly, con cui intendo che il codice che usa questa libreria può essere inserito in un python modulo per l'elaborazione dei dati e questo codice estero si collegherà al codice Python extant su entrambe le estremità, cioè, sia input che output, e sospetto, anche se ovviamente non lo so, questo è tutto ciò che è realmente inteso dalla "libreria python" "criterio. Quindi, se stai scrivendo un'app Web, questo codice sarebbe sul lato client. In altre parole, questa libreria non è Python, ma funziona con Python.
suo ingresso è (quasi) dicts pitone prime, più specificamente, json.load (a_python_dict) restituisce una matrice JSON o un oggetto, un formato che questa libreria javascript naturalmente può riconoscere; e
il formato di output è HTML o SVG, non gli oggetti in qualche formato linguaggio specifico
è possibile utilizzare d3.js.Ha un class specificamente per gli alberi di rendering:
var tree = d3.layout.tree().size([h, w]);
C'è anche un paio di esempi di alberi (codice di lavoro) nella cartella esempio nella fonte d3, che è possibile clonare/scarica il modulo del link ho fornito sopra.
Poiché d3 è una libreria javascript, il suo formato di dati nativi è JSON.
La struttura di base è un dizionario annidata, ogni dizionario rappresenta un singolo nodo con due valori, il nome del nodo e suoi figli (memorizzato in un array), calettato nomi e bambini, rispettivamente :
{"name": "a_root_node", "children": ["B", "C"]}
e, naturalmente, è semplice per la conversione tra dizionari di pitone e JSON:
>>> d = {"name": 'A', "children": ['B', 'C']}
>>> import json as JSON
>>> dj = JSON.dumps(d)
>>> dj
'{"name": "A", "children": ["B", "C"]}'
ecco un pitone dizionario rappresentazione di un albero grande (una decina di nodi) che ho convertito a JSON come sopra, e quindi resi in d3 come l'albero mostrato in figura:
tree = {'name': 'root', 'children': [{'name': 'node 2', 'children':
[{'name': 'node 4', 'children': [{'name': 'node 10', 'size': 7500},
{'name': 'node 11', 'size': 12000}]}, {'name': 'node 5', 'children':
[{'name': 'node 12', 'children': [{'name': 'node 16', 'size': 10000},
{'name': 'node 17', 'size': 12000}]}, {'name': 'node 13', 'size': 5000}]}]},
{'name': 'node 3', 'children': [{'name': 'node 6', 'children':
[{'name': 'node 14', 'size': 8000}, {'name': 'node 15', 'size': 9000}]},
{'name': 'node 7', 'children': [{'name': 'node 8', 'size': 10000},
{'name': 'node 9', 'size': 12000}]}]}]}
nota: d3 rende nel del browser; l'immagine sopra è solo una schermata della finestra del mio browser.
Puoi dire di più su cosa intendi per "file grafico ad albero?" Un esempio di input/output e alcuni commenti su come si desidera utilizzare l'output sarebbe di grande aiuto. – neirbowj
@neirbowj buon commento, grazie; aggiornato – jdotjdot