## ----clipboard, echo=FALSE, results='asis'------------------------------------
if (!identical(Sys.getenv("IN_PKGDOWN"), "true")) {
  cat('<script src="clipboard.js"></script>')
}

## ----Load packages for quick start, eval=TRUE, message=FALSE------------------
#--- Load required packages
library("RGraphSpace")
library("igraph")
library("ggplot2")
library("tidygraph")

## ----Quick start - 1, eval=TRUE, message=TRUE---------------------------------
# Load the bundled toy igraph object
data("gtoy1", package = "RGraphSpace")

# The most direct call: pass an igraph to plotGraphSpace()
plotGraphSpace(gtoy1, node.labels = TRUE)

## ----Toy igraph - 1, eval=TRUE, message=TRUE----------------------------------
# Make a 'toy' igraph with 5 nodes and 4 edges;
# ..either a directed or undirected graph
gtoy1 <- make_star(5, mode = "out")

# Check whether the graph is directed or not
is_directed(gtoy1)

# Check graph size
vcount(gtoy1)

ecount(gtoy1)

# Assign 'x' and 'y' coordinates to each vertex;
# ..this can be an arbitrary unit in (-Inf, +Inf)
V(gtoy1)$x <- c(0, 2, -2, -4, -8)
V(gtoy1)$y <- c(0, 0,  2, -4,  0)

# Assign a name to each vertex
V(gtoy1)$name <- paste0("n", 1:5)

## ----Toy igraph - 2, eval=TRUE, message=FALSE---------------------------------
# Plot the reconstructed 'gtoy1' using RGraphSpace
plotGraphSpace(gtoy1, node.labels = TRUE)

## ----Toy igraph - 3, eval=TRUE, message=FALSE---------------------------------
# Same toy graph, as tidygraph
gr <- as_tbl_graph(gtoy1)
gr

## ----Toy igraph - 4, eval=TRUE, message=FALSE---------------------------------
plotGraphSpace(gr, node.labels = TRUE)

## ----Layout, eval=TRUE, message=FALSE-----------------------------------------
# If your graph has no spatial coordinates, pass a layout directly:
set.seed(42)
GraphSpace(gtoy1, layout = igraph::layout_with_fr(gtoy1))

## ----Node attributes, eval=TRUE, message=FALSE--------------------------------
# Node fill color (Hexadecimal or color name)
V(gtoy1)$nodeFillColor <- c("red", "#00ad39", "grey80", "lightblue", "cyan")

# Node line color (Hexadecimal or color name)
V(gtoy1)$nodeLineColor <- "grey20"

# Node color; shorthand for both fill and line, overridden by either
# V(gtoy1)$nodeColor <- "grey80"

# Node transparency (in [0,1])
V(gtoy1)$nodeAlpha <- 1

# Node size (numeric in [0, 100], as '%' of the plot space)
V(gtoy1)$nodeSize <- c(8, 5, 5, 10, 5)

# Node shape (integer code between 0 and 25; see 'help(points)')
V(gtoy1)$nodeShape <- c(21, 22, 23, 24, 25)

# Node line width (as in 'lwd' standard graphics; see 'help(gpar)')
V(gtoy1)$nodeLineWidth <- 1

# Node labels ('NA' will omit the label)
V(gtoy1)$nodeLabel <- c("V1", "V2", "V3", "V4", NA)

# Node label size (in mm)
V(gtoy1)$nodeLabelSize <- 3

# Node label color (Hexadecimal or color name)
V(gtoy1)$nodeLabelColor <- "black"

## ----Edge attributes - 1, eval=TRUE, message=FALSE----------------------------
# Edge color (Hexadecimal or color name)
E(gtoy1)$edgeColor <- c("red","green","blue","black")

# Edge transparency (in [0,1])
E(gtoy1)$edgeAlpha <- 1

# Edge line width (as in 'lwd' standard graphics; see 'help(gpar)')
E(gtoy1)$edgeLineWidth <- 0.8

# Edge line type (as in 'lty' standard graphics; see 'help(gpar)')
E(gtoy1)$edgeLineType <- c("solid", "11", "dashed", "2124")

## ----Edge attributes - 2, eval=TRUE, message=FALSE----------------------------
# Arrowhead types in directed graphs
## Integer or character code:
## 0 = "---", 1 = "-->", -1 = "--|"
E(gtoy1)$arrowType <- 1

## ----Edge attributes - 3, eval=TRUE, message=FALSE----------------------------
# Arrowhead types in undirected graphs
## Integer or character code:
##  0 = "---"
##  1 = "-->",  2 = "<--",  3 = "<->",  4 = "|->"
## -1 = "--|", -2 = "|--", -3 = "|-|", -4 = "<-|"
gtoy1_undir <- igraph::as_undirected(gtoy1, edge.attr.comb = "first")
E(gtoy1_undir)$arrowType <- 1
# Note: in undirected graphs, this attribute overrides
# the edge's orientation in the edge list and adds arrowheads
# to edges that would otherwise be drawn without any

## ----A shortcut for RGraphSpace, eval=TRUE, message=FALSE---------------------
# Plot the fully attributed 'gtoy1'
plotGraphSpace(gtoy1, node.labels = TRUE)

## ----Using geoms - 1, eval=TRUE, message=TRUE---------------------------------
# Load the toy graph used in the previous example
data("gtoy1", package = "RGraphSpace")

# Create a GraphSpace object
gs <- GraphSpace(gtoy1)

# Normalize the coordinates
gs <- normalizeGraphSpace(gs)

gs

## ----Using geoms - 2, eval=TRUE, message=FALSE--------------------------------
# Build a layered ggplot2 graph
# geom_edgespace() draws edges; geom_nodespace() draws nodes
# aes(label = nodeLabel) maps the 'nodeLabel' vertex attribute to node labels
ggplot(gs) + 
  geom_edgespace() + 
  geom_nodespace(aes(label = nodeLabel)) + 
  theme_gspace_coords(is_norm = TRUE)

## ----label='Session information', eval=TRUE, echo=FALSE-----------------------
sessionInfo()

