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,
coloras.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 at 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 at r-project.org> On Behalf Of Kimmo Elo
> Sent: Thursday, March 21, 2024 10:51 AM
> To: r-help at 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 at r-project.org> R-help at
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 at r-project.org> R-help at 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.
>