【问题标题】:ggvis hover ability in for loop in shiny app闪亮应用程序中for循环中的ggvis悬停能力
【发布时间】:2018-01-25 06:21:51
【问题描述】:

我正在尝试在闪亮的应用程序中创建可变数量的图,每个图都具有来自 ggvis 的悬停能力,使用 add_tooltip() 来显示实际数据点。为了创建可变数量的图,我使用了 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)

【问题讨论】:

    标签: r shiny hover ggvis


    【解决方案1】:

    感谢this question here 回答了我自己的问题。 ggvis 代码需要包装在一个响应式({}) 函数中。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2022-01-26
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2021-04-01
      • 2015-06-23
      相关资源
      最近更新 更多