[R] geom_edge & color

Kimmo Elo k|mmo@e|o @end|ng |rom utu@||
Fri Mar 22 12:09:37 CET 2024


Hi,

this seems to work (assuming that your problem was the setting of
colours...):

--- snip ---

network %>%
    ggraph(., layout = "auto") +
    # This produces an error...
    # geom_edge_arc(curvature=0.3, aes(width=(E(network)$weight/10),
color=c("darkblue", "red")[as.factor(edge_list$relationship)], alpha=0.5))
+ 
    # ... this works :-)
    geom_edge_arc(curvature=0.3, aes(width=E(network)$weight/10,
color=edge_list$relationship), alpha=.5) +
    scale_edge_color_manual(values=c("pos"="darkblue", "neg"="red")) +
    
    # This does not work either...
    # geom_node_point(aes(size = V(network)$hub_score*200, color=
as.factor(V(network)$community))) +
    # ... so try this :)
    geom_node_point(aes(size = V(network)$hub_score*200,
color=V(network)$Subcategory_type)) +
    geom_node_text(aes(label =  V(network)$name), size=3, color="white",
repel=T)+
    scale_color_scico_d(palette = "batlow")+
    scale_edge_width(range = c(0.2,4))+
    scale_size(range = c(0.5,15)) +
    theme(plot.background = element_rect(fill = "black"),
          legend.position = "right",
          panel.background = element_rect(fill = "black"))

--- snip ---

At least in my data created with your code, the object "network" does not
have an attribute "community". I use the existing "Subcategory_type"
instead, because I had no time to debug this problem :-)

I do not know whether this produces what you expect or want to visualise.

HTH,

Kimmo


pe, 2024-03-22 kello 08:59 +0100, sibylle.stoeckli using gmx.ch kirjoitti:
> Dear community
> 
>  
> 
> Find enclosed the full working example.
> 
>  
> 
> Many thanks
> 
> Sibylle
> 
>  
> 
> Test_cat.csv
> 
> 
> Names
> 
> Subcategory_type
> 
> sources.cyto
> 
> source
> 
> Factor
> 
> 
> A.A
> 
> material
> 
> "A"
> 
> A
> 
> 1
> 
> 
> B.B
> 
> material
> 
> "B"
> 
> B
> 
> 1
> 
> 
> C.C
> 
> regulation
> 
> "C"
> 
> C
> 
> 1
> 
> 
> D.D
> 
> regulation
> 
> "D"
> 
> D
> 
> 1
> 
> 
> E.E
> 
> habitat
> 
> "E"
> 
> E
> 
> 1
> 
> 
> F.F
> 
> cultural
> 
> "F"
> 
> F
> 
> 1
> 
>  
> 
> Test_adjac.csv
> 
>         
> A.A
> 
> B.B
> 
> C.C
> 
> D.D
> 
> E.E
> 
> F.F
> 
> 
> A.A
> 
> 0
> 
> 0
> 
> 5
> 
> 5
> 
> 5
> 
> 5
> 
> 
> B.B
> 
> 4
> 
> 0
> 
> 1
> 
> 1
> 
> 1
> 
> 1
> 
> 
> C.C
> 
> 5
> 
> 5
> 
> 0
> 
> 5
> 
> 4
> 
> 2
> 
> 
> D.D
> 
> 5
> 
> 0
> 
> 5
> 
> 0
> 
> 5
> 
> 3
> 
> 
> E.E
> 
> 5
> 
> 1
> 
> 5
> 
> 5
> 
> 0
> 
> 4
> 
> 
> F.F
> 
> 1
> 
> 2
> 
> 3
> 
> 4
> 
> 5
> 
> 5
> 
>  
> 
>  
> 
> 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
> 
> pos
> 
> 
> F.F
> 
> A.A
> 
> 1
> 
> pos
> 
> 
> C.C
> 
> B.B
> 
> 5
> 
> pos
> 
> 
> E.E
> 
> B.B
> 
> 1
> 
> pos
> 
> 
> F.F
> 
> B.B
> 
> 2
> 
> neg
> 
> 
> 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
> 
> pos
> 
> 
> C.C
> 
> D.D
> 
> 5
> 
> pos
> 
> 
> E.E
> 
> D.D
> 
> 5
> 
> pos
> 
> 
> F.F
> 
> D.D
> 
> 4
> 
> pos
> 
> 
> A.A
> 
> E.E
> 
> 5
> 
> pos
> 
> 
> B.B
> 
> E.E
> 
> 1
> 
> pos
> 
> 
> C.C
> 
> E.E
> 
> 4
> 
> pos
> 
> 
> D.D
> 
> E.E
> 
> 5
> 
> pos
> 
> 
> F.F
> 
> E.E
> 
> 5
> 
> pos
> 
> 
> A.A
> 
> F.F
> 
> 5
> 
> pos
> 
> 
> B.B
> 
> F.F
> 
> 1
> 
> neg
> 
> 
> C.C
> 
> F.F
> 
> 2
> 
> pos
> 
> 
> D.D
> 
> F.F
> 
> 3
> 
> pos
> 
> 
> E.E
> 
> F.F
> 
> 4
> 
> pos
> 
> 
> F.F
> 
> F.F
> 
> 5
> 
> pos
> 
>  
> 
>  
> 
>  
> 
> #upload librairies
> 
> library(circlize)
> 
> library(ggplot2)
> 
> library(igraph)
> 
> library(tidyverse)
> 
> library(RColorBrewer)
> 
> library(stringi)
> 
> library(scico)
> 
> library(plotly)
> 
> library(ggraph)
> 
>  
> 
> #upload
> 
> aes<-read.csv("Test_adjac.csv", row.names = 1)
> 
> details<-read.csv("Test_cat.csv")
> 
>  
> 
>  
> 
> # adjacency  table 
> 
> aes_collapsed<-aes %>%
> 
>   rownames_to_column(var='Names') %>%
> 
>   tidyr::gather(target, weight, 1:ncol(aes)+1) %>%
> 
>   dplyr::filter(weight != 0) %>%
> 
>   mutate(weight = ifelse(weight == "-1", 0, weight)) # here 0 = negative
> values
> 
>  
> 
> write.csv(aes_collapsed, "edges_table-Test.csv", row.names = F)
> 
> edge_list<-read.csv("edges_table-Test.csv")
> 
>  
> 
>  
> 
> #create network and add some necessary attributes (vertices) for the plot
> 
>  
> 
> network <- graph_from_data_frame(aes_collapsed, directed= FALSE, 
> 
>                                  vertices = details)
> 
>  
> 
> ### network and vertex with 'subcategory_type'
> 
>  
> 
> 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(21))
> 
>               [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((21)))
> 
>               [match(V(.)$name, c(factor(V(.)$name)))]) %>%
> 
>   set_vertex_attr(name= "community",
> value=cluster_optimal(.)$Subcategory_type)
> 
>  
> 
> clrs<-scico(3, palette = "batlow")
> 
>  
> 
> windowsFonts(Helvetica = windowsFont("Helvetica")) 
> 
>  
> 
> par(bg="black")
> 
> network %>% plot(
> 
>      vertex.color=clrs[V(.)$community], 
> 
>      vertex.size=V(.)$hub_score*20, 
> 
>      vertex.frame.color=V(.)$color, 
> 
>      vertex.label.color="white", 
> 
>      vertex.label.cex=0.4, 
> 
>      vertex.label.family="Helvetica",
> 
>      vertex.label.font=0.75,
> 
>      edge.curved=0.5,
> 
>      edge.width= E(.)$weight,
> 
>      edge.color = ifelse(edge_list$relationship == "pos", "blue", "red"),
> 
>      layout=layout_with_mds(.))
> 
>  
> 
> tiff("figures/Test_network_bysubcatecory.tiff", width=1000, height=900,
> 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=3, color="white",
> repel=T)+
> 
>   scale_color_scico_d(palette = "batlow")+
> 
>   scale_edge_width(range = c(0.2,4))+
> 
>   scale_size(range = c(0.5,15)) +
> 
>   theme(plot.background = element_rect(fill = "black"),
> 
>         legend.position = "right",
> 
>         panel.background = element_rect(fill = "black"))
> 
> dev.off()
> 
>  
> 
> -----Original Message-----
> From: R-help <r-help-bounces using r-project.org> On Behalf Of Kimmo Elo
> Sent: Thursday, March 21, 2024 10:51 AM
> To: r-help using r-project.org
> Subject: Re: [R] geom_edge & color
> 
>  
> 
> Dear Sibylle,
> 
>  
> 
> your example is not working! E.g. no data for "aes_collapsed".
> 
>  
> 
> Best,
> 
>  
> 
> Kimmo
> 
>  
> 
> ke, 2024-03-20 kello 19:28 +0100, SIBYLLE STÖCKLI via R-help kirjoitti:
> 
> > 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()
> 
> > 
> 
> > ______________________________________________
> 
> >  <mailto:R-help using r-project.org> R-help using r-project.org mailing list -- To
> > UNSUBSCRIBE and more, see 
> 
> >  <https://stat.ethz.ch/mailman/listinfo/r-help>
> > https://stat.ethz.ch/mailman/listinfo/r-help
> 
> > PLEASE do read the posting guide
> 
> >  <http://www.R-project.org/posting-guide.html>
> > http://www.R-project.org/posting-guide.html
> 
> > and provide commented, minimal, self-contained, reproducible code.
> 
>  
> 
> ______________________________________________
> 
>  <mailto:R-help using r-project.org> R-help using r-project.org mailing list -- To
> UNSUBSCRIBE and more, see  <https://stat.ethz.ch/mailman/listinfo/r-help>
> https://stat.ethz.ch/mailman/listinfo/r-help
> 
> PLEASE do read the posting guide 
> <http://www.R-project.org/posting-guide.html>
> http://www.R-project.org/posting-guide.html
> 
> and provide commented, minimal, self-contained, reproducible code.
> 



More information about the R-help mailing list