networkD3和Shiny-按节点数过滤

时间:2019-04-11 16:50:40

标签: r shiny htmlwidgets networkd3

我有这个闪亮的应用程序,可以从df生成网络图。

while

我想通过用户选择的library(shiny) library(dplyr) library(tibble) library(networkD3) ui <- fluidPage( sidebarPanel( fluidRow(selectInput("nos","Mínimo de orientações",c(1:10),selected=c(1))) ), fluidRow(simpleNetworkOutput( "redes", width = "100%", height = "800px" )) ) server <- function(input, output, session) { df_orientadores <- data.frame(orientador=c("Chet Baker","Bill Evans","Miles Davis","Miles Davis","Dizzy Gillespie","Miles Davis"), autor=c("Clifford Brown","Freddie Hubbard","Kenny Dorham","Kenny Burrell","Arturo Sandoval","Goku")) output$redes <- renderSimpleNetwork({ sources <- df_orientadores %>% select(orientador) %>% dplyr::rename(label = orientador) destination <- df_orientadores %>% select(autor) %>% dplyr::rename(label = autor) nodes <- full_join(sources, destination, by = "label") nodes <- nodes %>% group_by(label) %>% count(label) %>% rename(freq=n) nodes <- nodes %>% rowid_to_column("id") nodes$peso <- ((nodes$freq)^3) orientacoes_network <- df_orientadores %>% group_by(orientador, autor) %>% dplyr::summarise(weight = n()) %>% ungroup() edges <- orientacoes_network %>% left_join(nodes, by = c("orientador" = "label")) %>% dplyr::rename(from = id) edges <- edges %>% left_join(nodes, by = c("autor" = "label")) %>% dplyr::rename(to = id) edges <- select(edges, from, to, weight) nodes_d3 <- mutate(nodes, id = id - 1) edges_d3 <- mutate(edges, from = from - 1, to = to - 1) filtro_nos <- nodes_d3 edges_d3$value <- 1 forceNetwork(Links = edges_d3, Nodes = nodes_d3, Source = "from", Target = "to", NodeID = "label", Group = "id", Value = "value", opacity = 1, fontSize = 20, zoom = TRUE, Nodesize = "peso", arrows = TRUE) }) } shinyApp(ui, server) 上的最小节点数(在freq数据框中描述为nodes_d3)来更新图形

我尝试按频率数过滤input$nosnodes_d3,但返回错误edges_d3

有什么想法怎么做?

我也尝试过使用reactValues,但是不会。我不知道在这种情况下我是否必须对原始数据帧进行子集化并生成网络,或者只是对forcenetwork中使用的dfs进行子集化(我以为我已经做到了,但仍然没用。)

1 个答案:

答案 0 :(得分:0)

创建数据后,需要同时过滤edges_d3nodes_d3数据帧,然后需要重新调整from和{{1过滤后的to数据帧中的}}值,以反映它们在edges_d3数据帧中引用的节点的新位置。

nodes_d3