2017-08-17 5 views
0

光沢のあるアプリで可変数のプロットを作成しようとしていますが、それぞれ実際のデータポイントを表示するためにadd_tooltip()を使用してggvisからホバー能力があります。私はforループを使用しているプロットの可変数を作成するには。それ自身で動くことができるおもちゃの例については以下を参照してください。光沢のあるアプリでループのggvisホバー能力

私のコードで何らかの理由で、ホバーオーバーアビリティは作成される最終プロットに対してのみ正しく機能します。誰でもこの問題を解決する方法があるかもしれないし、よりよいアプローチを提案するかもしれないことを知っていますか?

ありがとうございます!

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コードは、リアクティブ({})関数でラップする必要があります。これが誰かを助けることを望みます。

関連する問題