У меня есть сетевой график, и я хотел бы покрасить края, чтобы соответствовать их соответствующим узлам. Это довольно просто на графике igraph
, но я бы предпочел сделать на ggraph
, как мне нравится другая эстетика, предлагаемая пакетом.
В ggraph
кажется, что контроль над цветом узла невелик; в то время как цвет края покрыт широко.
У меня такой вопрос: как я могу сопоставить свои ребра с их узлами, которые были окрашены с помощью пользовательской функции, чтобы каждое ребро, которое «покидает» узел, было окрашено так же, как и его узел. Это должно помочь людям легче отслеживать потоки через сеть. Более общий вопрос заключается в следующем: как ggraph назначает цвета вне эстетического аргумента. Мой вопрос похож на другой вопрос, который я задавал здесь ранее, но наоборот (сопоставить ребра с узлами), нашел здесь .
Вот воспроизводимый пример:
library(tidyverse)
library(igraph)
library(ggraph)
library(tidygraph)
library(RColorBrewer)
## the custom function using Color Brewer
cols_f <- colorRampPalette(RColorBrewer::brewer.pal(11, 'Spectral'))
## make the graph
g <- erdos.renyi.game(50, .1)
# provide some names
V(g)$name <- 1:vcount(g)
#plot using ggraph
g %>%
as_tbl_graph() %>%
activate(nodes) %>%
mutate(degree = centrality_degree()) %>%
ggraph()+
geom_edge_fan(aes(color = as.factor(from),
alpha = ..index..),
show.legend = F)+
geom_node_point(aes(size = degree),
color = cols_f(vcount(g)), # custom function for node color
show.legend = F)+
scale_color_manual(values = cols_f(ecount(g)))+ # custom function for edge color
coord_equal()