Skip to contents

Constructor for GeomNodeSpace ggproto objects.

A wrapper around geom_point that enables direct use of node attributes stored in GraphSpace objects as aesthetics.

This geom is designed to map node-level attributes (e.g., fill, size) or any aesthetics supported by GeomPoint.

Usage

geom_nodespace(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = FALSE
)

Arguments

mapping

Set of aesthetic mappings created by ggplot2::aes(). These mappings override global aesthetics and are not inherited from the top-level plot.

data

A GraphSpace object.

stat

The statistical transformation to use on the data. Defaults to identity.

position

Position adjustment, either as a string or the result of a call to a position adjustment function.

...

Additional parameters passed to the underlying drawing function in GeomNodeSpace.

na.rm

Logical. Should missing values be removed? Defaults to FALSE.

show.legend

Logical or a named logical vector indicating whether this layer should be included in legends.

inherit.aes

Logical. If FALSE (default), the layer will use aesthetics defined in mapping.

Value

A ggplot2 layer that renders node glyphs defined by GeomNodeSpace.

Aesthetics

geom_nodespace() understands geom_point aesthetics.

If these aesthetics are not explicitly provided in aes(), they are automatically retrieved from the GraphSpace object.

x, yRequired (automatically supplied).
fillNode interior colour (see aes_colour_fill_alpha).
colourNode border colour (see aes_colour_fill_alpha).
alphaTransparency (see aes_colour_fill_alpha).
shapeNode shape (see points and aes_linetype_size_shape).
sizeNode size (see drawing section and aes_linetype_size_shape).
strokeNode line width (see gg_par and aes_linetype_size_shape).

Required aesthetics x and y are supplied from the GraphSpace object and do not need to be manually mapped.

Additional parameters can be passed to control fixed values for the layer. For example: fill = "red", stroke = 3, alpha = 0.5, or shape = 21.

Drawing

The interpretation of size depends on how it is provided:

  • As an aesthetic: When mapped within aes(), size follows the behavior of geom_point, using absolute units to ensure consistency with the plot legends.

  • As a parameter: When set outside aes(), size is treated as a percentage of the viewport ([0, 100]), scaling in npc units. This allows nodes to resize dynamically with viewport changes.

Examples


# Make a demo igraph
library(igraph)
gtoy1 <- make_star(15, mode="out")

# Set some node attributes
V(gtoy1)$nodeSize <- runif(vcount(gtoy1), 1, 20)
V(gtoy1)$nodeColor <- rainbow(vcount(gtoy1))

# Set some variables
V(gtoy1)$user_var1 <- runif(vcount(gtoy1), 1, 3)^3
V(gtoy1)$user_var2 <-  rep(c(1, 2, 3), each = 5)

# Create a GraphSpace object
gs <- GraphSpace(gtoy1, layout = layout_in_circle(gtoy1))
#> Validating the 'igraph' object...
#> Vertex attribute 'name' missing; assigning names... 
#> Creating a 'GraphSpace' object...

if (FALSE) { # \dontrun{

# Example 1: Nodes scaling with the legend
# When 'size' is mapped inside aes(), it follows
# ggplot2 default behavior: sizes are translated 
# to absolute units (mm) via 'scale_size()'.

ggplot() + 
geom_edgespace(data = gs, arrow_offset = 0.01) +
  geom_nodespace(mapping = aes(size = nodeSize, fill = user_var2), 
  data = gs) + 
  scale_size(range = c(1, 12)) + 
  theme(aspect.ratio = 1)
  
# Example 2: Nodes scaling with the viewport
# When 'size' is passed as a node attribute, 
# as inherited from the igraph object, it is
# interpreted as a percentage of the plot area
# and translated to NPC units.

ggplot() + 
geom_edgespace(data = gs, arrow_offset = 0.01) +
geom_nodespace(mapping = aes(fill = user_var2), data = gs) +
theme(aspect.ratio = 1)
  
} # }