2017-09-21 4 views
0

J'ai une application brillante dans laquelle j'ai un graphe de réseau recomposés à l'aide ggraph, quelque chose de similaire à l'application ci-dessous:En utilisant le brossage lié à un graphique de réseau à partir GGRAPH dans une application Brillant

library(ggraph) 
library(igraph) 
library(shiny) 

ui <- fluidPage(
    plotOutput("plot", brush = brushOpts(id = "plot_brush")) 
) 

server <- function(input, output) { 
    graph <- graph_from_data_frame(highschool) 

    output$plot <- renderPlot({ 
    ggraph(graph) + 
     geom_edge_link(aes(colour = factor(year))) + 
     geom_node_point() 
    }) 

    observe(print(
    brushedPoints(as_data_frame(graph, what = "vertices"), input$plot_brush) 
     ) 
    ) 
} 

shinyApp(ui, server) 

Ce que je suis Lorsque vous cliquez sur un graphique et faites-le glisser dans un graphique pour que certains nœuds soient capturés, je peux examiner plus d'informations sur ces points spécifiques capturés. Pour l'instant, je n'utilise que observe({print()}) pour que je puisse voir dans la console ce qui est capturé. Mon problème, chaque fois que je sélectionne une zone dans l'application, je reçois 0 lignes retournées dans la console, quel que soit le nombre de nœuds inclus dans la zone sélectionnée. Comment puis-je faire retourner les noeuds inclus dans la zone sélectionnée?

Répondre

0

This response m'a montré le chemin:

library(ggraph) 
library(igraph) 
library(shiny) 
library(dplyr) 

ui <- fluidPage(
    plotOutput("plot", brush = brushOpts(id = "plot_brush")) 
) 

server <- function(input, output) { 
    graph2 <- graph_from_data_frame(highschool) 

    set.seed(2017) 
    p <- ggraph(graph2, layout = "nicely") + 
    geom_edge_link() + 
    geom_node_point() 

    plot_df <- ggplot_build(p) 

    coords <- plot_df$data[[2]] 

    output$plot <- renderPlot(p) 

    coords_filt <- reactive({ 
    if (is.null(input$plot_brush$xmin)){ 
     coords 
    } else { 
    filter(coords, x >= input$plot_brush$xmin, 
      x <= input$plot_brush$xmax, 
      y >= input$plot_brush$ymin, 
      y <= input$plot_brush$ymax) 
    } 
    }) 

    observe(print(
    coords_filt() 
) 
) 

} 

shinyApp(ui, server)