Skip to contents

{ggflowchart} is an R package for producing flowcharts using {ggplot2}.


Install the package from CRAN using:


or install the development version from GitHub:



The idea of {ggflowchart} is to create simple flowcharts with minimal effort. Currently, all flowcharts are constructed using the ggflowchart() function. For the most basic flowchart, it takes as input a data frame containing (at least) two columns for the start and end points of the edges in the flowchart.

data <- tibble::tibble(from = c("A", "A", "A", "B", "C", "F"),
                       to = c("B", "C", "D", "E", "F", "G"))

The flowchart is then created using ggflowchart().

See vignettes for further examples of usage.

Aesthetic mappings

Some arguments can be mapped to aesthetics and some cannot. Arguments that can currently be mapped to aesthetics:

  • fill: must be a valid colour, or the name of a column in node_data if mapping to a variable. Fill colours can be changed with e.g. scale_fill_manual().
  • text_colour (or text_color): must be a valid colour, or the name of a column in node_data if mapping to a variable. Colours can be changed with e.g. scale_colour_manual().

Arguments that may be mapped to aesthetics in future:

  • colour (or color) for the outline colour of nodes.
  • arrow_colour (or arrow_color)
  • arrow_linewidth
  • arrow_linetype
  • alpha

Upcoming features

Upcoming features that are currently listed as issues being worked on include:

  • Ability to have elliptical (or circular) nodes rather than just rectangles.

If you have a suggestion of an additional feature, or find a bug, please file an issue on the GitHub repository.

Contributor guidelines

If you’d like to contribute to {ggflowchart}, I’d welcome your help. If you’re making a PR, please follow the guidelines below, to make the collaboration easier:

  • You have updated the NEWS and version number in DESCRIPTION.
  • You have checked that R CMD check passes with no ERRORs or WARNINGs. If there is a NOTE - please outline what it is in the PR.
  • You have checked that lintr::lint_package() passes.
  • You have checked the list of packages in Imports is still in alphabetical order to enable better tracking of dependencies as the package grows.
  • You have not used the base R |> pipe (we’re not quite ready to specify R 4.1 or higher as a dependency yet!).
  • If this is a feature request PR (not a bug fix) please make sure it relates to an issue that has not been assigned to someone else (and tag the issue in the PR description).

If these checks fail, and there is no response from the PR author for 1 month, the PR will be automatically closed.