Sankey Diagrams
Sankey plots illustrate the flow of information or material.
devtools::install_github("gaborcsardi/sankey")
library(sankey)
The API of the package is very simple. You can create a sankey
object
with make_sankey
, and plot it with sankey
. make_sankey
takes at
least one data frame that defines the edges of the plot. This should be a
data frame, with the starting points of the edges in the first column,
and the end point of the edges in the second column. Both must character
vectors.
Here is a simple example that shows function calls in the pkgsnap package:
edges <- read.table(stringsAsFactors = FALSE, textConnection(
" get_deps get_description
get_deps parse_deps
get_deps %||%
get_deps drop_internal
get_description pkg_from_filename
parse_deps str_trim
cran_file get_pkg_type
cran_file r_minor_version
download_urls split_pkg_names_versions
download_urls cran_file
pkg_download dir_exists
pkg_download download_urls
pkg_download filename_from_url
pkg_download try_download
restore pkg_download
restore drop_missing_deps
restore install_order
restore get_deps
split_pkg_names_versions data_frame
"))
pkgsnap_sankey <- make_sankey(edges = edges)
sankey(pkgsnap_sankey)
Several properties of the plot can be customized by setting extra columns in the data frame that define the edges, or another data frame, that defines the nodes.
Current list of graphical parameters for edges:
colorstyle
Whether the to use a solid color (col
), orgradient
to plot the edges. The color of a gradient edges is between the colors of the nodes.curvestyle
Edge style,sin
for sinusoid curves,line
for straight lines.col
Edge color, for edges with solid colors.weight
Edge weight. Determines the width of the edges.
Current list of graphical parameters for nodes:
col
Node color.size
Node size.x
Horizontal coordinates of the center of the node.y
Vertical coordinates of the center of the node.shape
Shape of the node. Possible values:rectangle
,point
,invisible
.lty
Lite type, seepar
.srt
How to rotate the label, seepar
.textcol
Label color.label
Label text. Defaults to node name.adjx
Horizontal adjustment of the label. Seeadj
in thepar
manual.adjy
Vertical adjustment of the label. Seeadj
in thepar
manual.boxw
Width of the node boxes.cex
Label size multiplication factor.top
Vertical coordinate of the top of the node.center
Vertical coordinate of the center of the node.bottom
Vertical coordinate of the bottom of the node.pos
Position of the text label, seepar
.textx
Horizontal position of the text label.texty
Vertical position of the text label.
Here is the same plot again, with some customization.
nodes <- data.frame(
stringsAsFactors = FALSE,
id = c("snap", sort(unique(c(edges[,1], edges[,2]))))
)
nodes$col <- ifelse(nodes$id %in% c("snap", "restore"), "orange", "#2ca25f")
edges$colorstyle <- "gradient"
sankey(make_sankey(nodes, edges))
We colored the nodes of the exported functions orange, and also added a color gradient along the edges.
GPL (>= 2) © Mango Solutions, January Weiner, Gábor Csárdi