簡體   English   中英

ggvis懸停功能在閃亮應用程序的for循環中

[英]ggvis hover ability in for loop in shiny app

我正在嘗試在一個閃亮的應用程序中創建可變數量的繪圖,每個繪圖都具有使用add_tooltip()從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)

感謝這里的這個問題,回答了我自己的問題。 ggvis代碼需要包裝在react({})函數中。 希望這對某人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM