Re: [R] geom_edge & color

2024-03-24 Thread SIBYLLE STÖCKLI via R-help
Dear Kommo

Many thanks for the valuable solution.

Sibylle

-Original Message-
From: R-help  On Behalf Of Kimmo Elo
Sent: Friday, March 22, 2024 12:10 PM
To: r-help@r-project.org
Subject: Re: [R] geom_edge & color

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.stoec...@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
> 
> 
&

Re: [R] geom_edge & color

2024-03-22 Thread Kimmo Elo
.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  On Behalf Of Kimmo Elo
> Sent: Thursday, March 21, 2024 10:51 AM
> To: r-help@r-project.org
> Subject: Re: [R] geom_edge & color
> 
>  
> 
> Dear Sib

Re: [R] geom_edge & color

2024-03-22 Thread SIBYLLE STÖCKLI via R-help
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  On Behalf Of Kimmo Elo
Sent: Thursday, March 21, 2024 10:51 AM
To: r-help@r-project.org
Subject: Re: [R] geom_edge & color

 

Dear Sibylle,

 

your example is not working! E.g. no

Re: [R] geom_edge & color

2024-03-21 Thread Kimmo Elo
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()
> 
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

__
R-help@r-project.or