plot.Node {data.tree} | R Documentation |
Plot a graph, or get a graphviz dot representation of the tree
Description
Use these methods to style your graph, and to plot it. The functionality is built around the DiagrammeR package, so for anything that goes beyond simple plotting, it is recommended to read its documentation at https://rich-iannone.github.io/DiagrammeR/docs.html. Note that DiagrammeR is only suggested by data.tree, so 'plot' only works if you have installed it on your system.
Usage
## S3 method for class 'Node'
plot(
x,
...,
direction = c("climb", "descend"),
pruneFun = NULL,
output = "graph"
)
ToDiagrammeRGraph(root, direction = c("climb", "descend"), pruneFun = NULL)
SetNodeStyle(node, inherit = TRUE, keepExisting = FALSE, ...)
SetEdgeStyle(node, inherit = TRUE, keepExisting = FALSE, ...)
SetGraphStyle(root, keepExisting = FALSE, ...)
GetDefaultTooltip(node)
Arguments
x |
The root node of the data.tree structure to plot |
... |
For the SetStyle methods, this can be any stlyeName / value pair. See https://graphviz.org/Documentation.php for details. For the plot.Node generic method, this is not used. |
direction |
when converting to a network, should the edges point from root to children ("climb") or from child to parent ("descend")? |
pruneFun |
allows providing a prune criteria, i.e. a function taking a |
output |
A string specifying the output type; |
root |
The root |
node |
The |
inherit |
If TRUE, then children will inherit this node's style. Otherwise they inherit from this node's parent. Note that the inherit always applies to the node, i.e. all style attributes of a node and not to a single style attribute. |
keepExisting |
If TRUE, then style attributes are added to possibly existing style attributes on the node. |
Details
Use SetNodeStyle
and SetEdgeStyle
to define the style of your plot. Use plot
to display a
graphical representation of your tree.
The most common styles that can be set on the nodes are:
color
fillcolor
fixedsize
true or falsefontcolor
fontname
fontsize
height
penwidth
shape
box, ellipse, polygon, circle, box, etc.style
tooltip
width
The most common styles that can be set on the edges are:
arrowhead
e.g. normal, dot, veearrowsize
arrowtail
color
dir
forward, back, both, nonefontcolor
fontname
fontsize
headport
label
minlen
penwidth
tailport
tooltip
A good source to understand the attributes is https://graphviz.org/Documentation.php. Another good source is the DiagrammeR package documentation, or more specifically: https://rich-iannone.github.io/DiagrammeR/docs.html
In addition to the standard GraphViz functionality, the data.tree
plotting infrastructure takes advantage
of the fact that data.tree structure are always hierarchic. Thus, style attributes are inherited from parents
to children on an individual basis. For example, you can set the fontcolor to red on a parent, and then all children
will also have red font, except if you specifically disallow inheritance. Labels and tooltips are never inherited.
Another feature concerns functions: Instead of setting a fixed value (e.g. SetNodeStyle(acme, label = "Acme. Inc"
),
you can set a function (e.g. SetNodeStyle(acme, label = function(x) x$name)
). The function must take a Node
as its single argument. Together with inheritance, this becomes a very powerful tool.
The GetDefaultTooltip
method is a utility method that can be used to print all attributes of a Node
.
There are some more examples in the 'applications' vignette, see vignette('applications', package = "data.tree")
Examples
data(acme)
SetGraphStyle(acme, rankdir = "TB")
SetEdgeStyle(acme, arrowhead = "vee", color = "blue", penwidth = 2)
#per default, Node style attributes will be inherited:
SetNodeStyle(acme, style = "filled,rounded", shape = "box", fillcolor = "GreenYellow",
fontname = "helvetica", tooltip = GetDefaultTooltip)
SetNodeStyle(acme$IT, fillcolor = "LightBlue", penwidth = "5px")
#inheritance can be avoided:
SetNodeStyle(acme$Accounting, inherit = FALSE, fillcolor = "Thistle",
fontcolor = "Firebrick", tooltip = "This is the accounting department")
SetEdgeStyle(acme$Research$`New Labs`,
color = "red",
label = "Focus!",
penwidth = 3,
fontcolor = "red")
#use Do to set style on specific nodes:
Do(acme$leaves, function(node) SetNodeStyle(node, shape = "egg"))
plot(acme)
#print p as label, where available:
SetNodeStyle(acme, label = function(node) node$p)
plot(acme)