How to make a Tree diagram using images as vertices, that goes left to right
It's explained on the doc page of GraphLayout
. This documentation page is very long, and most of the information is under the Scope section, under specific layout methods.
Graph[{1 -> 2, 1 -> 3, 3 -> 4, 3 -> 5},
GraphLayout -> {"LayeredEmbedding", "RootVertex" -> 1, "Orientation" -> Left}]
You do not need to use TreeGraph
unless you also want to verify that the graph is indeed a tree. Graph
will do. The key is GraphLayout
.
With this layout, the root of directed trees is not detected automatically. You can specify it automatically as I did above. With "LayeredDigraphEmbedding"
, it is detected, but the layout will not be identical.
You can also achieve the same with IGLayoutReingoldTilford
from the IGraph/M package.
IGLayoutReingoldTilford[
Graph[{1 -> 2, 1 -> 3, 3 -> 4, 3 -> 5}],
"RootVertices" -> {1}, "Rotation" -> Pi/2
]
tg = TreeGraph[{1 -> 2, 1 -> 3},
VertexShape -> {1 -> Graphics[RegularPolygon[4]],
2 -> Graphics[RegularPolygon[5]],
3 -> Graphics[RegularPolygon[6]]}, VertexSize -> 0.6]
SetProperty[tg, VertexCoordinates -> RotationTransform[Pi/2][GraphEmbedding[tg]]]
Alternatively, you can use TreePlot
with the hidden options "VertexNames"
, "VertexFrameBackground"
and "VertexFrameStyle"
:
shapes = Graphics[RegularPolygon[#], ImageSize -> 90, Background -> None] & /@
{4, 6, 5};
TreePlot[{1 -> 2, 1 -> 3}, Left,
DirectedEdges -> True, VertexLabeling -> True,
"VertexNames" -> shapes,
"VertexFrameBackground" -> None,
"VertexFrameStyle" -> None]