1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
## ----include=FALSE------------------------------------------------------------
set.seed(2022)
## ----message=FALSE------------------------------------------------------------
library(ggraph)
library(tidygraph)
set_graph_style(plot_margin = margin(1,1,1,1))
graph <- as_tbl_graph(highschool)
# Not specifying the layout - defaults to "auto"
ggraph(graph) +
geom_edge_link(aes(colour = factor(year))) +
geom_node_point()
## -----------------------------------------------------------------------------
ggraph(graph, layout = 'kk') +
geom_edge_link(aes(colour = factor(year))) +
geom_node_point()
## -----------------------------------------------------------------------------
ggraph(graph, layout = 'kk', maxiter = 100) +
geom_edge_link(aes(colour = factor(year))) +
geom_node_point()
## -----------------------------------------------------------------------------
layout <- create_layout(graph, layout = 'eigen')
ggraph(layout) +
geom_edge_link(aes(colour = factor(year))) +
geom_node_point()
## -----------------------------------------------------------------------------
head(layout)
## -----------------------------------------------------------------------------
attributes(layout)
## -----------------------------------------------------------------------------
# An arc diagram
ggraph(graph, layout = 'linear') +
geom_edge_arc(aes(colour = factor(year)))
## -----------------------------------------------------------------------------
# A coord diagram
ggraph(graph, layout = 'linear', circular = TRUE) +
geom_edge_arc(aes(colour = factor(year))) +
coord_fixed()
## -----------------------------------------------------------------------------
graph <- tbl_graph(flare$vertices, flare$edges)
# An icicle plot
ggraph(graph, 'partition') +
geom_node_tile(aes(fill = depth), size = 0.25)
## -----------------------------------------------------------------------------
# A sunburst plot
ggraph(graph, 'partition', circular = TRUE) +
geom_node_arc_bar(aes(fill = depth), size = 0.25) +
coord_fixed()
## ----fig.show='hold', results='hide'------------------------------------------
graph <- as_tbl_graph(highschool) |>
mutate(degree = centrality_degree())
lapply(c('stress', 'fr', 'lgl', 'graphopt'), function(layout) {
ggraph(graph, layout = layout) +
geom_edge_link(aes(colour = factor(year)), show.legend = FALSE) +
geom_node_point() +
labs(caption = paste0('Layout: ', layout))
})
## -----------------------------------------------------------------------------
graph <- graph |>
mutate(friends = ifelse(
centrality_degree(mode = 'in') < 5, 'few',
ifelse(centrality_degree(mode = 'in') >= 15, 'many', 'medium')
))
ggraph(graph, 'hive', axis = friends, sort.by = degree) +
geom_edge_hive(aes(colour = factor(year))) +
geom_axis_hive(aes(colour = friends), size = 2, label = FALSE) +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'focus', focus = node_is_center()) +
ggforce::geom_circle(aes(x0 = 0, y0 = 0, r = r), data.frame(r = 1:5), colour = 'grey') +
geom_edge_link() +
geom_node_point() +
coord_fixed()
## -----------------------------------------------------------------------------
graph <- tbl_graph(flare$vertices, flare$edges)
set.seed(1)
ggraph(graph, 'circlepack', weight = size) +
geom_node_circle(aes(fill = depth), size = 0.25, n = 50) +
coord_fixed()
## -----------------------------------------------------------------------------
set.seed(1)
ggraph(graph, 'circlepack', weight = size) +
geom_edge_link() +
geom_node_point(aes(colour = depth)) +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'treemap', weight = size) +
geom_node_tile(aes(fill = depth), size = 0.25)
## -----------------------------------------------------------------------------
ggraph(graph, 'treemap', weight = size) +
geom_edge_link() +
geom_node_point(aes(colour = depth))
## -----------------------------------------------------------------------------
ggraph(graph, 'cactustree') +
geom_node_circle(aes(fill = depth), size = 0.25) +
coord_fixed()
## -----------------------------------------------------------------------------
importFrom <- match(flare$imports$from, flare$vertices$name)
importTo <- match(flare$imports$to, flare$vertices$name)
ggraph(graph, 'cactustree') +
geom_node_circle(aes(fill = depth),
size = 0.25,
alpha = 0.2
) +
geom_conn_bundle(aes(colour = after_stat(index)),
data = get_con(importFrom, importTo),
edge_alpha = 0.25
) +
theme(legend.position = "none") +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'tree') +
geom_edge_diagonal()
## -----------------------------------------------------------------------------
dendrogram <- hclust(dist(iris[, 1:4]))
ggraph(dendrogram, 'dendrogram', height = height) +
geom_edge_elbow()
## -----------------------------------------------------------------------------
ggraph(dendrogram, 'dendrogram', circular = TRUE) +
geom_edge_elbow() +
coord_fixed()
## -----------------------------------------------------------------------------
tree <- create_tree(100, 2, directed = FALSE) |>
activate(edges) |>
mutate(length = runif(n()))
ggraph(tree, 'unrooted', length = length) +
geom_edge_link()
## -----------------------------------------------------------------------------
graph <- create_notable('zachary')
ggraph(graph, 'matrix', sort.by = node_rank_leafsort()) +
geom_edge_point(mirror = TRUE) +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'matrix', sort.by = node_rank_spectral()) +
geom_edge_point(mirror = TRUE) +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'fabric', sort.by = node_rank_fabric()) +
geom_node_range(colour = 'grey') +
geom_edge_span(end_shape = 'square') +
coord_fixed()
## -----------------------------------------------------------------------------
ggraph(graph, 'fabric', sort.by = node_rank_fabric(), shadow.edges =TRUE) +
geom_node_range(colour = 'grey') +
geom_edge_span(aes(filter = shadow_edge), colour ='lightblue' , end_shape = 'square') +
geom_edge_span(aes(filter = !shadow_edge), end_shape = 'square') +
coord_fixed()
## -----------------------------------------------------------------------------
gr <- sfnetworks::as_sfnetwork(sfnetworks::roxel)
ggraph(gr, 'sf') +
geom_edge_sf(aes(color = type)) +
geom_node_sf(size = 0.3)
## -----------------------------------------------------------------------------
gr <- create_notable('Walther')
# Use stress layout to come up with a initial position
prior <- create_layout(gr, 'stress')
# Optimise placement with metro layout
ggraph(gr, 'metro', x = prior$x, y = prior$y, grid_space = 1, max_movement = 50) +
geom_edge_link(width = 4) +
geom_node_point(size = 10) +
geom_edge_link(color = 'white', width = 1) +
geom_node_point(color = 'white', size = 4)
|