2017-08-17 59 views
0

我想創建一個閃亮的應用程序,每個懸停能力從ggvis使用add_tooltip()顯示實際數據點的可變數量的情節。要創建可變數量的圖,我正在使用for循環。請參閱下面的玩具示例,可以自行運行。ggvis懸停能力在for循環閃亮的應用程序

由於某些原因,在我的代碼中,鼠標懸停功能只能在創建的最終情節中正常工作。有誰知道我可以如何解決這個問題,或者有更好的方法建議?

謝謝!

library(shiny) 
library(ggvis) 

# Define ui for variable amounts of plots 
ui <- fluidPage(
    fluidRow(

    uiOutput("mydisplay") 
) 
) 

server <- function(input, output) { 

# toy data example 
    x = data.frame(
    id = 1:30, 
    myname = c(rep("First 10",10),rep("Second 10",10),rep("Third 10",10)), 
    stringsAsFactors = F 
    ) 

# ggvis add_tooltip() function 
    all_values <- function(x) { 
    if(is.null(x)) return(NULL) 
    row <- mydf[mydf$id == x$id, c("id","myname") ] 
    paste0(names(row), ": ", format(row), collapse = "<br />") 
    } 

# For loop to create variable number of plots 
    for (k in 1:length(unique(x$myname))){ 

    mydf = subset(x,x$myname==unique(x$myname)[k]) 
    mydf %>% ggvis(~id, ~id) %>% 
     layer_points(size := 30, key := ~id) %>% 
     add_tooltip(all_values,"hover") %>% 
     bind_shiny(paste0("p_",k), paste0("p_ui_",k)) 

    } 

# For displaying in the UI 
    output$mydisplay = renderUI({ 

lapply(1:length(unique(x$myname)), function(j) { 
    fluidRow(
    column(7, ggvisOutput(paste0("p_",j))) 
) 
    }) 
    }) 
    } 

# Run the application 
shinyApp(ui = ui, server = server) 

回答

0

回答了我自己的問題,感謝this question here。 ggvis代碼需要封裝在一個反應​​({})函數中。希望這可以幫助某人。