"Mind Maps" in the title is perhaps a bit narrow. I am looking for such Graph
options that would make large text-heavy vertex labels look as comprehensive as possible. This should include some control over such things as automated text wrapping or edge arrow placements or text alignment. You can see on the figure below the design I have in mind.
Defining proper VertexShapeFunction is the key. This is a start with a few options that can be tuned or expanded (in Style for instance):
vshape[w_][x_, s_, _] :=
Inset[Framed[Pane[Style[s,TextAlignment->Left],w],
Background->LightYellow,RoundingRadius->5],x]
Pane does the automated text wrapping over a given width that I make a variable via currying. Let's get some data for a long-text labels, which are here some Wikipedia articles' titles and hyperlinks:
ocd="Obsessive\[Dash]compulsive personality disorder";
ocdlinks=DeleteDuplicatesBy[WikipediaData[ocd,"LinksRules",
"MaxLevelItems"->3,"MaxLevel"->3],Sort];
The code below will produce the top image of this post. Note I set the arrow head position manually at 0.65 length of the edge.
Graph[ocdlinks,
VertexShapeFunction -> vshape[70],
EdgeShapeFunction->
GraphElementData[{"ShortCarvedArcArrow",
"ArrowSize"->.03,"ArrowPositions"->.65}],
VertexStyle -> Black,
AspectRatio->1,
PerformanceGoal -> "Quality",
GraphLayout ->{"LayeredDigraphEmbedding",
"Orientation"->Left,
"RootVertex"->ocd}]
The function for VertexShapeFunction defined above will do a couple of more tricks. Let's get some other similar complex-text data:
syn="Acro\[Dash]dermato\[Dash]ungual\[Dash]lacrimal\[Dash]tooth syndrome";
synlinks=DeleteDuplicatesBy[WikipediaData[syn,
"LinksRules","MaxLevelItems"->3,"MaxLevel"->3],Sort];
I will try another layout and will remove manual arrow head placement. As you can see in this case arrow head always remains positioned at the boundary of the vertex label. Also text is reflowing nicely with help of the Pane.
Manipulate[
Graph[synlinks,
VertexShapeFunction -> vshape[w],
VertexStyle -> Black,
AspectRatio->1,
ImageSize->700{1,1},
PerformanceGoal -> "Quality",
GraphLayout ->{"RadialEmbedding","RootVertex"->syn}]
,{{w,70},30,120}]
Attachments: