Me gustaría trazar un "árbol de descomposición" en Mathematica.¿Cuál es la forma más simple de trazar un árbol de descomposición en Mathematica?
Tengo una función f
que toma un objeto y devuelve todos los componentes de ese objeto como una lista. A los efectos de esta pregunta, vamos a descomponer expresiones de Mathematica de la siguiente manera (mi real f
se basa en una base de datos externa para descomponer los diferentes tipos de objetos, por lo que no se puede colocar fácilmente):
f[e_?AtomQ] := {}
f[e_] := List @@ e
me gustaría para crear un diagrama de árbol que muestre cómo se descompone un objeto mientras seguimos aplicando de forma recursiva f
. Para el ejemplo particular f
anterior, deberíamos obtener algo muy similar a la salida de TreeForm
, excepto que debería mostrarse una expresión completa (en lugar de solo una cabeza) en cada nodo. Los hijos de un nodo van a ser sus componentes según lo devuelto por f
.
Tenga en cuenta que los elementos pueden repetirse en un árbol de descomposición como este, pero no los elementos se repiten en la salida de TreePlot
ya que funciona con gráficos. Una idea sería generar un "nombre interno" único para cada nodo, construir un gráfico y usar TreePlot, configurándolo para mostrar la forma real de los nodos en lugar de su "nombre interno"
Hackish en cierto modo, pero es el tipo de solución simple que estaba esperando.Y los objetos que descompongo se almacenan como cadenas, por lo que son muy adecuados allí (sin evaluación accidental). – Szabolcs
¿Puede sugerir una forma compatible con esta solución para cambiar la fuente de los nodos? (Necesario para mostrar glifos que no están presentes en la fuente predeterminada.) – Szabolcs
@Szabolcs Puede usar la opción 'VertexRenderingFunction' de' TreeForm' para tomar el control completo sobre la apariencia del nodo, p. 'VertexRenderingFunction -> (Recuadro [Enmarcado [Estilo [# 2, FontFamily ->" Webdings "], Fondo-> LightYellow], # 1] &)'. – WReach