分层时间网络/树图静态,非交互式

问题描述

我想画一个网络/树图来直观地分析一些复杂的监管数据。

我按照this example创建了一个很好地表示数据结构的共现网络图:

a = 10
def f(x,a=a):
    return x + a
a = 3
print(f(1))

reprex package (v1.0.0) 于 2021 年 2 月 18 日创建

但是,我想以更有意义的方式使用数据的层次结构 (#library library(tidyverse) library(ggnetwork) library(network) #> network: Classes for Relational Data #> Version 1.16.1 created on 2020-10-06. #> copyright (c) 2005,Carter T. Butts,University of California-Irvine #> Mark S. Handcock,University of California -- Los Angeles #> David R. Hunter,Penn State University #> Martina Morris,University of Washington #> Skye Bender-deMoll,University of Washington #> For citation information,type citation("network"). #> Type help("network-package") to get started. #example data df <- structure(list(id = c("a","a","b","c","d","d"),level = c(1L,2L,3L,1L,4L,4L),from = c("a","aa1","aa2","bb1","bb2","bb3","cc1","cc2","cc3","dd1","dd2","dd3"),to = c("aa1","dd3","aa3","bb4","cc4","dd4"),year = c(2020L,2019L,2001L,2002L,2000L,2018L,2020L,2017L,2000L)),class = "data.frame",row.names = c(NA,-16L)) # show data df #> id level from to year #> 1 a 1 a aa1 2020 #> 2 a 2 aa1 aa2 2019 #> 3 a 2 aa1 dd3 2001 #> 4 a 3 aa2 aa3 2002 #> 5 b 1 b bb1 2000 #> 6 b 2 bb1 bb2 2019 #> 7 b 3 bb2 bb3 2018 #> 8 b 4 bb3 bb4 2019 #> 9 c 1 c cc1 2020 #> 10 c 2 cc1 cc2 2019 #> 11 c 3 cc2 cc3 2018 #> 12 c 4 cc3 cc4 2017 #> 13 d 1 d dd1 2019 #> 14 d 2 dd1 dd2 2018 #> 15 d 3 dd2 dd3 2001 #> 16 d 4 dd3 dd4 2000 #prepare data df %>% mutate(id2=id) %>% unite(id2,from,to,sep=",") %>% group_by(id,level,id2) %>% summarise(code=toString(id2)) -> keywords #> `summarise()` has grouped output by 'id','level'. You can override using the `.groups` argument. # build a weighted edge list e <- keywords$code %>% str_split(",| and ") %>% lapply(function(x) { expand.grid(x,x,w = 1 / length(x),stringsAsFactors = FALSE) }) %>% bind_rows e <- apply(e[,-3],1,str_sort) %>% t %>% data.frame(stringsAsFactors = FALSE) %>% mutate(w = e$w) #drop loops e <- group_by(e,X1,X2) %>% summarise(w = sum(w)) %>% filter(X1 != X2) #> `summarise()` has grouped output by 'X1'. You can override using the `.groups` argument. #make network object n <- network(e[,directed = FALSE) # add labels l <- n %v% "degree_w" l <- network.vertex.names(n) network::set.vertex.attribute(n,"label",l) # add year information as color network::set.vertex.attribute(n,"year",df$year) #plot ggplot(n,aes(x,y,xend = xend,yend = yend)) + geom_edges(color = "white") + geom_nodes(color = "grey50") + geom_nodelabel(aes(label = label,color=factor(year)),label.size = NA) + scale_size_continuous(range = c(1,6)) + scale_color_discrete()+ theme_blank() + theme(panel.background = element_rect(fill = 'lightgrey',colour = "lightgrey")) + ggtitle("network plot") -> plot set.seed(23) plot ) 和时间结构 (level) 并将数据绘制如下:

  1. x 轴:year 按字母顺序排列或连接的 id
  2. y 轴 id'slevel 从 1:4 和 2020-2000 订购

最终的网络图应该类似于:

enter image description here

我正在寻找使用 years 和长数据格式/tidyverse 工作流程的解决方案。不过,我很感激每一个提示

更新 1:

我发现了一些关于使用 ggplot2 here 根据 x 轴和 y 轴定位节点的提示。我想知道是否有使用 igraph解决方案。

更新 2:

Jesse Sadler mentioned 一些与网络分析相关的 R 包(ggplot2tidygraph)。这些包支持 ggplot2/tidyverse 工作流程。但是,我找不到任何方法来使用这些包设计所需的情节。

更新 3:

François Briatte shared 一个非常好的网络分析有用 R 包列表。但是,我找不到解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...