Skip to contents

Create a tibble (or data frame) with each row representing an edge.

data <- tibble::tribble(
  ~from, ~to,
  "A", "B",
  "B", "C"
)

The default layout option, "tree" uses the tree layout from {igraph}.

ggflowchart(data, layout = "tree")

If you’d prefer a horizontal, left-to-right, flowchart simply set horizontal = TRUE:

ggflowchart(data, layout = "tree", horizontal = TRUE)

If you want more control over where the nodes are positioned, you can specify layout = "custom". If you choose this option, you must have a column named x and a column named y in node_data (alongside name) specifying the coordinates of the centre of each node.

node_data <- tibble::tribble(
  ~name, ~x, ~y,
  "A", 1, 3,
  "B", 2, 2,
  "C", 3, 1
)
ggflowchart(data, node_data = node_data, layout = "custom")

This means you can also create layouts using other functions or packages. For example, you could create a custom layout using igraph::layout_nicely() and pass it into node_data:

library(dplyr)

# generate edges
data <- tibble::tribble(
  ~from, ~to,
  "A", "B",
  "A", "C",
  "A", "D"
)

# use a different layout from {igraph}
g <- igraph::graph_from_data_frame(
  select(data, c(from, to)),
  directed = TRUE
)
coords <- igraph::layout_as_star(g)
colnames(coords) <- c("x", "y")
node_data <- tibble::as_tibble(coords) %>%
  mutate(name = igraph::vertex_attr(g, "name"))

# create flowchart
ggflowchart(data, node_data = node_data, layout = "custom")

Some of these alternative layouts (especially ones from {igraph}), may eventually become additional layout options within {ggflowchart}. Note that the placement of the arrows may work better with some layout options than others.