节点不尊重ggraph / igraph中的刻面(Nodes not respecting facetting in ggraph/igraph)

编程入门 行业动态 更新时间:2024-10-28 04:31:03
节点不尊重ggraph / igraph中的刻面(Nodes not respecting facetting in ggraph/igraph)

我在理解ggplot2和ggraph在ggplot2方面的区别时遇到了一些麻烦。 请考虑以下数据:

library(igraph) library(ggraph) library(ggplot2) df <- structure(list(x = c("H001", "H024", "H090", "H090", "H098", "H103", "H126", "H152", "H155", "H155", "B002", "B011", "B075", "B092", "M002", "M002", "M002", "M050", "M050", "M085", "M085", "M247", "M247", "M247"), y = c("H103", "H126", "H152", "H155","H155", "H001", "H024", "H090", "H090", "H098", "B092", "B075", "B011", "B002", "M050", "M085", "M247", "M002", "M247", "M002", "M247", "M002", "M050", "M085"), r = c(0.963248925980302, 0.991452643542894, 0.965947578382865, 0.963234153063794, 0.962277411462605, 0.963248925980302, 0.991452643542894, 0.965947578382865, 0.963234153063794, 0.962277411462605, 0.960948147492217, 0.957371360458182, 0.957371360458182, 0.960948147492217, 0.96976135236222, 0.977435712803837, 0.997037031981303, 0.96976135236222, 0.978553503235858, 0.977435712803837, 0.992741796542001, 0.997037031981303, 0.978553503235858, 0.992741796542001), facet_var = c("08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08HB", "08HB", "08HB", "08HB", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM")), class = "data.frame", row.names = c(NA, -24L), .Names = c("x", "y", "r", "facet_var") )

会话信息

> sessionInfo() R version 3.4.2 (2017-09-28) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 Matrix products: default locale: [1] LC_COLLATE=English_Canada.1252 LC_CTYPE=English_Canada.1252 LC_MONETARY=English_Canada.1252 LC_NUMERIC=C [5] LC_TIME=English_Canada.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] ggraph_1.0.0 ggplot2_2.2.1 igraph_1.1.2 testthat_1.0.2 devtools_1.13.3 loaded via a namespace (and not attached): [1] Rcpp_0.12.13 compiler_3.4.2 plyr_1.8.4 bindr_0.1 viridis_0.4.0 [6] tools_3.4.2 digest_0.6.12 viridisLite_0.2.0 memoise_1.1.0 tibble_1.3.4 [11] gtable_0.2.0 pkgconfig_2.0.1 rlang_0.1.2 rstudioapi_0.7.0-9000 ggrepel_0.7.0 [16] yaml_2.1.14 bindrcpp_0.2 gridExtra_2.3 withr_2.0.0 dplyr_0.7.4 [21] grid_3.4.2 glue_1.1.1 R6_2.2.2 tweenr_0.1.5 udunits2_0.13 [26] magrittr_1.5 scales_0.5.0 fortunes_1.5-4 MASS_7.3-47 units_0.4-6 [31] assertthat_0.2.0 swtext_0.0.1 ggforce_0.1.1 colorspace_1.3-2 lazyeval_0.2.0 [36] munsell_0.4.3 crayon_1.3.4

I am having a little trouble understanding the difference between ggplot2 and ggraph with respect to facetting. Consider the following data:

library(igraph) library(ggraph) library(ggplot2) df <- structure(list(x = c("H001", "H024", "H090", "H090", "H098", "H103", "H126", "H152", "H155", "H155", "B002", "B011", "B075", "B092", "M002", "M002", "M002", "M050", "M050", "M085", "M085", "M247", "M247", "M247"), y = c("H103", "H126", "H152", "H155","H155", "H001", "H024", "H090", "H090", "H098", "B092", "B075", "B011", "B002", "M050", "M085", "M247", "M002", "M247", "M002", "M247", "M002", "M050", "M085"), r = c(0.963248925980302, 0.991452643542894, 0.965947578382865, 0.963234153063794, 0.962277411462605, 0.963248925980302, 0.991452643542894, 0.965947578382865, 0.963234153063794, 0.962277411462605, 0.960948147492217, 0.957371360458182, 0.957371360458182, 0.960948147492217, 0.96976135236222, 0.977435712803837, 0.997037031981303, 0.96976135236222, 0.978553503235858, 0.977435712803837, 0.992741796542001, 0.997037031981303, 0.978553503235858, 0.992741796542001), facet_var = c("08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08MH", "08HB", "08HB", "08HB", "08HB", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM", "08NM")), class = "data.frame", row.names = c(NA, -24L), .Names = c("x", "y", "r", "facet_var") )

Session Info

> sessionInfo() R version 3.4.2 (2017-09-28) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 Matrix products: default locale: [1] LC_COLLATE=English_Canada.1252 LC_CTYPE=English_Canada.1252 LC_MONETARY=English_Canada.1252 LC_NUMERIC=C [5] LC_TIME=English_Canada.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] ggraph_1.0.0 ggplot2_2.2.1 igraph_1.1.2 testthat_1.0.2 devtools_1.13.3 loaded via a namespace (and not attached): [1] Rcpp_0.12.13 compiler_3.4.2 plyr_1.8.4 bindr_0.1 viridis_0.4.0 [6] tools_3.4.2 digest_0.6.12 viridisLite_0.2.0 memoise_1.1.0 tibble_1.3.4 [11] gtable_0.2.0 pkgconfig_2.0.1 rlang_0.1.2 rstudioapi_0.7.0-9000 ggrepel_0.7.0 [16] yaml_2.1.14 bindrcpp_0.2 gridExtra_2.3 withr_2.0.0 dplyr_0.7.4 [21] grid_3.4.2 glue_1.1.1 R6_2.2.2 tweenr_0.1.5 udunits2_0.13 [26] magrittr_1.5 scales_0.5.0 fortunes_1.5-4 MASS_7.3-47 units_0.4-6 [31] assertthat_0.2.0 swtext_0.0.1 ggforce_0.1.1 colorspace_1.3-2 lazyeval_0.2.0 [36] munsell_0.4.3 crayon_1.3.4

最满意答案

您需要将相关变量作为节点属性分配给节点的构面。 你的facet_var变量是一个edge属性; 如果将其作为节点属性分配给每个dyad中的每个节点,则可以使用分面。

facet_graph由两个变量构成(例如,边缘属性和节点属性)。 看起来像facet_nodes是你想要的,但是你需要向参数发送一个node属性,而不是一个edge属性。

目前,您的igraph对象只有一个edge属性:

> graph_cors IGRAPH UN-- 16 24 -- + attr: name (v/c), r (e/n), facet_var (e/c) + edges (vertex names): [1] H001--H103 H024--H126 H090--H152 H090--H155 H098--H155 H001--H103 H024--H126 H090--H152 [9] H090--H155 H098--H155 B002--B092 B011--B075 B011--B075 B002--B092 M002--M050 M002--M085 [17] M002--M247 M002--M050 M050--M247 M002--M085 M085--M247 M002--M247 M050--M247 M085--M247 graph_cors <- graph_from_data_frame(df, directed = FALSE) facet_nodes <- cbind(c(df[,1], df[,2]), df[match(c(df[,1], df[,2]), df[,1]),4]) # Assign the facet_var variable to corresponding dyad pairs V(graph_cors)$facet_node <- facet_nodes[match(V(graph_cors)$name, facet_nodes[,1]),2]

现在, igraph对象有一个节点属性(“facet_node”):

> graph_cors IGRAPH UN-- 16 24 -- + attr: name (v/c), facet_node (v/c), r (e/n), facet_var (e/c) + edges (vertex names): [1] H001--H103 H024--H126 H090--H152 H090--H155 H098--H155 H001--H103 H024--H126 H090--H152 [9] H090--H155 H098--H155 B002--B092 B011--B075 B011--B075 B002--B092 M002--M050 M002--M085 [17] M002--M247 M002--M050 M050--M247 M002--M085 M085--M247 M002--M247 M050--M247 M085--M247 # Use the facet_nodes argument with the nodal attribute ggraph(graph_cors) + geom_edge_link(aes(edge_alpha = abs(r), color = r), edge_width = 2) + guides(edge_alpha = "none") + scale_edge_colour_gradientn(limits = c(-1, 1), colors = topo.colors(5)) + geom_node_point(color = "black", size = 5) + geom_node_text(aes(label = name), repel = TRUE) + facet_nodes(~facet_node)

在此处输入图像描述

You need to assign the relevant variable as a node attribute to facet by nodes. Your facet_var variable is an edge attribute; if you assign it to each node in each dyad as node attribute, the faceting works.

facet_graph facets by two variables (e.g. an edge attribute and a node attribute). Seems like facet_nodes is what you want, but you need to send a node attribute to the argument, not an edge attribute.

Currently, your igraph object only has an edge attribute:

> graph_cors IGRAPH UN-- 16 24 -- + attr: name (v/c), r (e/n), facet_var (e/c) + edges (vertex names): [1] H001--H103 H024--H126 H090--H152 H090--H155 H098--H155 H001--H103 H024--H126 H090--H152 [9] H090--H155 H098--H155 B002--B092 B011--B075 B011--B075 B002--B092 M002--M050 M002--M085 [17] M002--M247 M002--M050 M050--M247 M002--M085 M085--M247 M002--M247 M050--M247 M085--M247 graph_cors <- graph_from_data_frame(df, directed = FALSE) facet_nodes <- cbind(c(df[,1], df[,2]), df[match(c(df[,1], df[,2]), df[,1]),4]) # Assign the facet_var variable to corresponding dyad pairs V(graph_cors)$facet_node <- facet_nodes[match(V(graph_cors)$name, facet_nodes[,1]),2]

Now, the igraph object has a node attribute ("facet_node"):

> graph_cors IGRAPH UN-- 16 24 -- + attr: name (v/c), facet_node (v/c), r (e/n), facet_var (e/c) + edges (vertex names): [1] H001--H103 H024--H126 H090--H152 H090--H155 H098--H155 H001--H103 H024--H126 H090--H152 [9] H090--H155 H098--H155 B002--B092 B011--B075 B011--B075 B002--B092 M002--M050 M002--M085 [17] M002--M247 M002--M050 M050--M247 M002--M085 M085--M247 M002--M247 M050--M247 M085--M247 # Use the facet_nodes argument with the nodal attribute ggraph(graph_cors) + geom_edge_link(aes(edge_alpha = abs(r), color = r), edge_width = 2) + guides(edge_alpha = "none") + scale_edge_colour_gradientn(limits = c(-1, 1), colors = topo.colors(5)) + geom_node_point(color = "black", size = 5) + geom_node_text(aes(label = name), repel = TRUE) + facet_nodes(~facet_node)

enter image description here

更多推荐

本文发布于:2023-08-07 23:47:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1466368.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:节点   ggraph   igraph   facetting   respecting

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!