在R Shiny中使用jQuery时,Plotly消失了

时间:2015-12-17 17:23:11

标签: jquery r shiny plotly

我正在使用jQuery (jQuery Core 2.1.4)开发我的Shiny应用程序的一部分。另外,我使用新的plotly包来渲染图。 jQuery本身也很完美,plotly也是如此;然而,当使用两者时,plotly的情节消失了。调用jQuery似乎是原因。

  

是否存在允许使用jQuery和plotly的解决方法   (特别是ggplotly)在同一个Shiny App中?

这是一个例子。我知道这个例子不需要jQuery,只是为了说明plotly在包含jQuery(取消注释行#tags$head(tags$script(src='http://code.jquery.com/jquery-2.1.4.js')),以包含它)时如何绘制消失:

#Call the required libraries
library(shiny)
library(plotly)
library(ggplot2)

#Server to output plot
server <- shinyServer(function(input, output) {

  output$plotlyout <- renderPlotly({

    #Create random points
    x <- rnorm(100)
    y <- rnorm(100)

    #Set to data frame
    dats <- as.data.frame(cbind(x,y))

    #Plot them in plotly
    ggplotly(ggplot(dats) + geom_point(aes(x = x, y = y)))

  })

})

#Shiny plot
ui <- shinyUI(

  #One page with main Panel
  fluidPage(

      #Uncomment this to see how Jquery ruins everything
      #tags$head(tags$script(src='http://code.jquery.com/jquery-2.1.4.js')),

      #Panel for plot
      mainPanel(

          #Output plot
          plotlyOutput("plotlyout")
      )
  )
)

shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE))

谢谢!

1 个答案:

答案 0 :(得分:4)

解决方案:您需要使用JQuery的noconflict()。在行加载jquery之后添加tags$head(tags$script("$.noConflict(true);")),

说明:Shiny默认已经加载了JQuery。你可以通过查看任何Shiny应用程序页面的来源来看到这一点,你会发现它加载了jquery。当我运行你的应用程序并查看JavaScript控制台的错误时,我得到了一些奇怪的错误,这些错误表明JQuery的某些功能无法正常工作。所以我认为“嗯jquery肯定是加载的。它实际上加载了两次。但是当我加载它时它不起作用。让我们Google吧!”。因此,如果你谷歌如何在一个页面上加载jquery两次,你会看到许多答案说使用noconflict()。在你的jquery行之后添加它似乎可以解决问题。