Learn R Programming

ggraph

/dʒiː.dʒɪˈrɑːf/ (or g-giraffe)

A grammar of graphics for relational data

ggraph is an extension of ggplot2 aimed at supporting relational data structures such as networks, graphs, and trees. While it builds upon the foundation of ggplot2 and its API it comes with its own self-contained set of geoms, facets, etc., as well as adding the concept of layouts to the grammar.

An example

library(ggraph)
#> Loading required package: ggplot2
library(tidygraph)
#> 
#> Attaching package: 'tidygraph'
#> The following object is masked from 'package:stats':
#> 
#>     filter

# Create graph of highschool friendships
graph <- as_tbl_graph(highschool) |> 
    mutate(Popularity = centrality_degree(mode = 'in'))

# plot using ggraph
ggraph(graph, layout = 'kk') + 
    geom_edge_fan(aes(alpha = after_stat(index)), show.legend = FALSE) + 
    geom_node_point(aes(size = Popularity)) + 
    facet_edges(~year) + 
    theme_graph(foreground = 'steelblue', fg_text_colour = 'white')

The core concepts

ggraph builds upon three core concepts that are quite easy to understand:

  1. The Layout defines how nodes are placed on the plot, that is, it is a conversion of the relational structure into an x and y value for each node in the graph. ggraph has access to all layout functions available in igraph and furthermore provides a large selection of its own, such as hive plots, treemaps, and circle packing.
  2. The Nodes are the connected entities in the relational structure. These can be plotted using the geom_node_*() family of geoms. Some node geoms make more sense for certain layouts, e.g. geom_node_tile() for treemaps and icicle plots, while others are more general purpose, e.g. geom_node_point().
  3. The Edges are the connections between the entities in the relational structure. These can be visualized using the geom_edge_*() family of geoms that contain a lot of different edge types for different scenarios. Sometimes the edges are implied by the layout (e.g. with treemaps) and need not be plotted, but often some sort of line is warranted.

All of the tree concepts have been discussed in detail in dedicated blog posts that are also available as vignettes in the package. Please refer to these for more information.

Note: The linked blog posts are based on ggraph v1. After ggraph v1.1 the underlying implementation was moved to tidygraph and cleaned up, but this resulted in some breaking changes in the process. Therefore the vignette versions are generally recommended as they have been updated.

Supported data types

There are many different ways to store and work with relational data in R. ggraph is built upon tidygraph and the large swath of data structures it supports are thus natively supported in ggraph. In order to get a data type supported by ggraph, simply provide an as_tbl_graph method for it.

Installation

ggraph is available through CRAN and can be installed with install.packages('ggraph'). The package is under active development though and the latest set of features can be obtained by installing from this repository using devtools

# install.packages("pak")
pak::pak('thomasp85/ggraph')

Related work

ggraph is not the only package to provide some sort of support for relational data in ggplot2, though I’m fairly certain that it is the most ambitious. ggdendro provides support for dendrogram and hclust objects through conversion of the structures into line segments that can then be plotted with geom_segment(). ggtree provides more extensive support for all things tree-related, though it lacks some of the layouts and edge types that ggraph offers (it has other features that ggraph lacks though). For more standard hairball network plots ggnetwork, geomnet, and GGally all provide some functionality though none of them are as extensive in scope as ggraph.

Code of Conduct

Please note that the ‘ggraph’ project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('ggraph')

Monthly Downloads

63,221

Version

2.2.1

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Last Published

March 7th, 2024

Functions in ggraph (2.2.1)

geom_conn_bundle

Create hierarchical edge bundles between node connections
geom_edge_arc

Draw edges as Arcs
geom_axis_hive

Draw rectangular bars and labels on hive axes
flare

The class hierarchy of the flare visualization library
geom_edge_bend

Draw edges as diagonals
geom_edge_bundle_force

Bundle edges using force directed edge bundling
autograph

Quickplot wrapper for networks
facet_edges

Create small multiples based on edge attributes
facet_graph

Create a grid of small multiples by node and/or edge attributes
facet_nodes

Create small multiples based on node attributes
geom_edge_density

Show edges as a density map
geom_edge_diagonal

Draw edges as diagonals
geom_edge_elbow

Draw edges as elbows
geom_edge_fan

Draw edges as curves of different curvature
geom_edge_bundle_minimal

Bundle edges along the minimal spanning tree
geom_edge_parallel

Draw multi edges as parallel lines
geom_edge_loop

Draw edges as diagonals
geom_edge_link

Draw edges as straight lines between nodes
geom_edge_hive

Draw edges in hive plots
geom_edge_point

Draw edges as glyphs
geom_edge_sf

Draw edges as LINESTRINGs in geographical space
geom_node_text

Annotate nodes with text
geom_node_sf

Show nodes as POINTs in geographical space
geom_edge_bundle_path

Bundle edges using edge path bundling
geom_node_arc_bar

Show nodes as thick arcs
geom_edge_span

Draw edges as vertical spans
geom_node_range

Show nodes as a line spanning a horizontal range
geom_node_point

Show nodes as points
geom_edge_tile

Draw edges as glyphs
geom_node_circle

Show nodes as circles
ggraph

Create a ggraph plot
get_con

Create a connection extractor function
geom_node_tile

Draw the rectangles in a treemap
guide_edge_colourbar

Colourbar legend for edges
get_edges

Create edge extractor function
geom_node_voronoi

Show nodes as voronoi tiles
geometry

Define simple shapes for line capping
get_sf_nodes

Create a node extractor function
ggraph-package

ggraph: An Implementation of Grammar of Graphics for Graphs and Networks
StatFilter

ggraph extensions to ggplot2
highschool

Friendship among high school boys
layout_tbl_graph_auto

Automatically pick a layout based on graph type
guide_edge_coloursteps

Coloursteps legend for edges
layout_tbl_graph_cactustree

Calculate nodes as fractal circle buds
layout_tbl_graph_circlepack

Calculate nodes as circles packed within their parent circle
layout_tbl_graph_backbone

Place node to emphasize group structure
internal_extractors

Internal data extractors
layout_tbl_graph_dendrogram

Apply a dendrogram layout to layout_tbl_graph
layout_tbl_graph_centrality

Place nodes in circles according to centrality measure
guide_edge_direction

Edge direction guide
layout_tbl_graph_metro

Place nodes according to the standard design of metro maps
layout_tbl_graph_matrix

Place nodes on a diagonal
layout_tbl_graph_manual

Manually specify a layout for layout_tbl_graph
layout_tbl_graph_linear

Place nodes on a line or circle
layout_tbl_graph_eigen

Place nodes according to their eigenvalues
layout_tbl_graph_fabric

Create a fabric layout
layout_tbl_graph_htree

Layout binary trees in a fractal H formation
layout_tbl_graph_igraph

Use igraph layout algorithms for layout_tbl_graph
layout_tbl_graph_sf

Place nodes on their geographical space
layout_tbl_graph_partition

Calculate nodes as areas dividing their parent
layout_tbl_graph_treemap

Calculate nodes as rectangles subdividing that of their parent
makeContent.textalong

Text angled according to line
layout_tbl_graph_focus

Place nodes in circles based on distance to a specific node
layout_tbl_graph_unrooted

Create an unrooted layout using equal-angle or equal-daylight
layout_tbl_graph_hive

Place nodes in a Hive Plot layout
node_angle

Get the angle of nodes and edges
makeContent.cappedpathgrob

Dynamic capping of paths
layout_to_table

Convert a layout to a table
layout_tbl_graph_pmds

Place nodes based on a multidimensional scaling of a set of pivot nodes
layout_tbl_graph_stress

Place nodes using stress majorisation
pack_circles

Pack circles together
scale_edge_linetype

Edge linetype scales
reexports

Objects exported from other packages
scale_edge_size

Edge size scales
scale_edge_colour

Edge colour scales
scale_edge_shape

Edge shape scales
scale_edge_width

Edge width scales
scale_edge_alpha

Edge alpha scales
scale_edge_fill

Edge fill scales
qgraph

Deprecated autograph predecessor
theme_graph

A theme tuned for graph visualizations
scale_label_size

Edge label size scales
whigs

Membership network of American Whigs
scale_type.ggraph_geometry

Define default scale type for geometry