动态创建具有光泽的交互式图

时间:2016-02-26 14:12:22

标签: r shiny

我使用动态数量的图创建了一个闪亮的应用,类似于this问题。它应该作为一些结果的概述 - 现在我想添加(双)点击一个图的可能性,以便做某事(例如只显示这一个有更多细节)。

我查看了interactive plots的教程。但是,我无法确定将侦听器放在我的代码中的单击输入事件的位置。它们总是返回NULL,我认为这是由于在生成绘图之前代码被执行的事实。以下是我创建图表的方法:

createPlots <- reactive ({
  numberOfFiles <- length(densityResult)

  if (numberOfFiles == 0)
    return(NULL)
  # Call renderPlot for each one. Plots are only actually generated when they
  # are visible on the web page.
  for (i in filesAnalyzed) {
    # Need local so that each item gets its own number. Without it, the value
    # of i in the renderPlot() will be the same across all instances, because
    # of when the expression is evaluated.
    local({
      my_i <- i
      plotname <- paste("densityPlot", my_i, sep="")
      result <- densityResult[[my_i]]
      output[[plotname]] <- renderPlot({
        plot(result$data, main=my_i, pch=19,cex=0.2, col= ColoursUsed[result$clusters])
        dev.off()
      })
    }
  })
})

output$plots <- renderUI({

  createPlots()

  plot_output_list <- lapply(1:length(filesAnalyzed), function(i) {
    plotname <- paste("densityPlot", filesAnalyzed[i], sep="")
    plotOutput(plotname, dblclick = dblclickOpts(id = paste(plotname, "_click", sep = "")))
  })

  # Convert the list to a tagList - this is necessary for the list of items
  # to display properly.
  do.call(tagList, plot_output_list)
})

我创建了一个用于测试的文本输出,它应该显示所选绘图的 id

  output$click_info <- renderUI({
    numberOfPlots <- length(densityResult)
    lapply(1:numberOfPlots, function(i) {
      renderText(input[[paste("densityPlot", names(densityResult)[i], "_click", sep = "")]])
    }) 
  })

然而,正如我之前所说,结果是NULL或者,就像在这种情况下,元素根本就没有被显示。 (我尝试了不同的版本,甚至硬编码第一个输入元素的名称)。使用RStudios调试,我可以跟进代码在创建图之前运行。如何在生成图表后访问输入元素

编辑:可以找到最小的示例here

0 个答案:

没有答案