2010-11-09 18 views
7

A veces me encuentro con el problema de las etiquetas en TreeForm que no se pueden leer debido a la superposición. Un ejemplo está debajo, ¿alguien puede ver una manera de deshacerse de la superposición?TreeForm sin superposición

 
{{4, 5, 6}, {{{2, 4, 5, 6}, {{{1, 2, 4}, {}}, {{2, 3, 6}, {}}}}, {{4, 
    5, 6, 8}, {{{4, 7, 8}, {}}, {{6, 8, 9}, {}}}}}} // TreeForm 

http://yaroslavvb.com/upload/treeform1.png

solución de Belisario ayuda con solapamiento, pero pierde información sobre herramientas, es decir comparar con

 
TreeForm[Hold[ 
    GraphPlotHighlight[edges : {((_ -> _) | {_ -> _, _}) ...}, 
    hl : {___} : {}, opts : OptionsPattern[]] := 
    Module[{verts, coords, g, sub}, 5]]]

http://yaroslavvb.com/upload/mathematica-tooltip.png

actualización respuesta 11/12 Terminé usando código a continuación (código de belisarius con una solución menor)

myTreeForm[exp_] := 
    Module[{tooltipText, i}, 
    tooltipText = 
    Cases[Cases[MakeBoxes[[email protected], StandardForm], 
     TooltipBox[x__] -> x, 7, Heads -> True], 
    TagBox[x__, y__] -> DisplayForm[[email protected]{x}], Heads -> True]; 
    i = 0; 
    TreeForm[exp, 
    VertexRenderingFunction -> ({Tooltip[ 
     Inset[Rasterize[Text[" " <> [email protected]#2 <> " "], 
      Background -> LightBlue], #1], tooltipText[[i++]]]} &)]]; 
+0

¿Estás hablando de este http://stackoverflow.com/q/4091728/421225? –

+0

Expresión para el ejemplo es de allí, seguro –

+0

Hay una directiva ['Tooltip'] (http://reference.wolfram.com/mathematica/ref/Tooltip.html) que espero que pueda usar para cuidar esa , si puedes descubrir la cuerda para ponerla ... – Cascabel

Respuesta

7

Hice esto antes, pero nunca generalicé el resultado.

rectOffset = {.25,.1}; 
    fontSize = 10 
    TreeForm[list, 
      VertexRenderingFunction -> ({White, EdgeForm[Black], 
      Rectangle[#1 - rectOffset, #1 + rectOffset], Black, 
      Text[ Style[#2, fontSize], #1]} &)] 

alt text

Editar Con información sobre herramientas

El uso de un "enfoque diferente"

Código está sucio, lo siento no hay tiempo para limpiarlo ahora

rectOffset = {.33, .1}; 
fontSize = 9; 
p = Cases[ 
    Cases[MakeBoxes[[email protected], StandardForm], TooltipBox[x__] -> x, 
    7, Heads -> True], TagBox[x__, y__] -> DisplayForm[[email protected]{x}], 
    Heads -> True]; 
i = 0; 
TreeForm[list, 
VertexRenderingFunction -> ({White, EdgeForm[Black], 
    Rectangle[#1 - rectOffset, #1 + rectOffset], Black, 
    Tooltip[Text[Style[#2, fontSize], #1], p[[i++]]]} &)] 

Salida

alt text

Editar 2

Creo que esta versión es mejor:

Clear["Global`*"]; 
list = Hold[ 
    GraphPlotHighlight[edges : {((_ -> _) | {_ -> _, _}) ...}, 
    hl : {___} : {}, opts : OptionsPattern[]] := 
    Module[{verts, coords, g, sub}, 5]]; 

myTreeForm[exp_] := 

    Module[{ps, tooltipText, i}, 

    ps[text_] := Rasterize[Text[Style[text]], "RasterSize"]; 

    tooltipText = 
    Cases[Cases[MakeBoxes[[email protected], StandardForm], 
     TooltipBox[x__] -> x, 7, Heads -> True], 
    TagBox[x__, y__] -> DisplayForm[[email protected]{x}], Heads -> True]; 

    i = 0; 

    TreeForm[list, 
    EdgeRenderingFunction -> ({Red, Line[#1]} &), 
    VertexRenderingFunction -> ({White, EdgeForm[Black], {}, Black, 
     Tooltip[ 
     Inset[Rasterize[Text[" " <> [email protected]#2 <> " "], 
      Background -> LightBlue], #1], tooltipText[[i++]]]} &)] 
    ]; 

list // myTreeForm 

Salida:

alt text

Editar 4 ... y la última

limpiado código, eliminar las funciones y variables espurias que estaban allí sólo para complicar las cosas:

myTreeForm[list_] := Module[{tooltipText, i}, 

    tooltipText = 
     Cases[Cases[MakeBoxes[[email protected], StandardForm], 
        TooltipBox[x__] -> x, 7, Heads -> True], 
       TagBox[x__, y__] -> DisplayForm[[email protected]{x}], Heads -> True]; 
    i = 0; 
    TreeForm[list, 
      VertexRenderingFunction -> 
      ({Tooltip[Inset[Rasterize[Text[" " <> [email protected]#2 <> " "], 
         Background -> LightBlue], #1], tooltipText[[i++]]]} &) 
    ] 
]; 

HTH!

+0

Eso es útil ...una desventaja es que pierde Tooltip con el subárbol en StandardForm, ejemplo agregado en la edición –

+0

@Yaroslav No entiendo a qué te refieres con "pierde Tooltip con el subárbol en StandardForm". ¿Cuáles son tus resultados esperados? –

+0

imagen añadida ejemplo –

0

Parece que la opción VertexCoordinateRules puede ser su mejor esperanza.

Cuestiones relacionadas