[R] geom_edge & color

sibyiie@stoeckii m@iii@g oii gmx@ch sibyiie@stoeckii m@iii@g oii gmx@ch
Wed Mar 20 19:28:42 CET 2024


Dear community

I am using ggraph to plot a network analysis. See part 2 in the working
example.
Besides different colors for different groups of nodes:
--> geom_node_point(aes(size = V(network)$hub_score*200, color=
as.factor(V(network)$community)))
I additionally want to consider different colors for different edge groups
The grouping is defined in the edge_list$relationship: negative relationship
= red and positive relationship = darkblue. The code is working in the way
that the  groups are separated by two colors. However, the code uses not the
assigned colors. Does anyone have any idea how to adapt the code?
--> geom_edge_arc(curvature=0.3, aes(width=(E(network)$weight/10),
color=c("darkblue", "red")[as.factor(edge_list$relationship)], alpha=0.5)) +

Kind regards
Sibylle




Working example

library(circlize)
library(ggplot2)
library(igraph)
library(tidyverse)
library(RColorBrewer)
library(stringi)
library(scico)
library(plotly)
library(ggraph)

edges_table_Test.csv

Names	target	weight relationship
B.B	A.A	4           pos
C.C	A.A	5           pos
D.D	A.A	5           neg
E.E	A.A	5          neg
F.F	A.A	1          pos
C.C	B.B	5         pos
E.E	B.B	1           pos
F.F	B.B	2          pos
A.A	C.C	5        pos
B.B	C.C	1        pos
D.D	C.C	5         pos
E.E	C.C	5         pos
F.F	C.C	3         pos
A.A	D.D	5        neg
B.B	D.D	1        neg
C.C	D.D	5        neg
E.E	D.D	5        neg
F.F	D.D	4         neg
A.A	E.E	5         neg
B.B	E.E	1        neg
C.C	E.E	4        neg
D.D	E.E	5        neg
F.F	E.E	5       pos
A.A	F.F	5        pos
B.B	F.F	1       pos
C.C	F.F	2       pos
D.D	F.F	3      pos
E.E	F.F	4       pos
F.F	F.F	5       pos

edge_list<-read.csv("edges_table_Test.csv")

network <- graph_from_data_frame(aes_collapsed, directed= FALSE,
                                 vertices = details)

temp<-cluster_optimal(network)
temp<-cbind(membership=temp$membership, Names=temp$name) aes_collapsed <-
aes_collapsed %>%
  merge(temp, by="Names")


network <- network %>%
  set_edge_attr(name = "type", value = factor(aes_collapsed$Names,
                                                 ordered =
is.ordered(V(network)$name))) %>%
  set_edge_attr(name = "membership", value = aes_collapsed$membership) %>%
  set_edge_attr(name = "color",
              value = c(viridis::viridis(5))
              [match(E(.)$type, c(factor(V(.)$name)))]) %>%
  set_vertex_attr(name = "trans_v_net", value = c(transitivity(., type =
"local"))) %>%
  set_vertex_attr(name = "hub_score", value = c(hub_score(.)$vector)) %>%
  set_vertex_attr(name = "color",
              value = c(viridis::viridis((5)))
              [match(V(.)$name, c(factor(V(.)$name)))]) %>%
  set_vertex_attr(name= "community", value=cluster_optimal(.)$membership)
clrs<-scico(3, palette = "batlow")

### part 1: network plot
par(bg="black")
network %>% plot(
     vertex.color=clrs[V(.)$community],
     vertex.size=V(.)$hub_score*5,
     vertex.frame.color=V(.)$color,
     vertex.label.color="white",
     vertex.label.cex=0.5,
     vertex.label.family="Helvetica",
     vertex.label.font=1,
     edge.curved=0.5,
     edge.width= network,
     layout=layout_with_mds(.))

### part 2: ggraph
tiff("figures/AES_network_bymembership.tiff", width=1000, height=700,
res=120) network %>%
  ggraph(., layout = "auto")+
geom_edge_arc(curvature=0.3, aes(width=(E(network)$weight/10),
color=c("darkblue", "red")[as.factor(edge_list$relationship)], alpha=0.5)) +

  geom_node_point(aes(size = V(network)$hub_score*200, color=
as.factor(V(network)$community))) +
  geom_node_text(aes(label =  V(network)$name), size=5, color="white",
repel=T)+
  scale_color_scico_d(palette = "batlow")+
  scale_edge_width(range = c(0.2,4))+
  scale_size(range = c(0.5,20)) +
  #scale_edge_color_manual(values = c(scico(21, palette="batlow")))+
  theme(plot.background = element_rect(fill = "black"),
        legend.position = "right",
        panel.background = element_rect(fill = "black"))
dev.off()



More information about the R-help mailing list