在 R Shiny 中使用 jQuery 时 Plotly 消失
Plotly disappears when using jQuery in R Shiny
我正在使用 jQuery (jQuery Core 2.1.4) 来开发我的 Shiny 应用程序的一部分。此外,我正在使用新的 plotly
包来渲染绘图。 jQuery 和 plotly
一样完美;但是,当同时使用两者时,plotly
中的图消失了。调用 jQuery 似乎是原因。
Is there a work-around that allows to use jQuery and plotly
(specifically ggplotly
) in the same 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))
谢谢!
解决方法:需要使用JQuery的noconflict()。在 行加载 jquery.
之后添加 tags$head(tags$script("$.noConflict(true);")),
说明:JQuery 已被 Shiny 默认加载。您可以通过查看任何 Shiny 应用程序页面的源代码来了解这一点,您会看到它已加载 jquery。当我 运行 您的应用程序并查看 JavaScript 控制台中的错误时,我收到了 st运行ge 错误,表明 JQuery 的某些内容无法正常工作。所以我想"hmm jquery is definitely loaded. It's actually loaded twice. But it's not working when I load it twice. Let's Google that!"。因此,如果您 Google 了解如何在一个页面上加载 jquery 两次,您会看到很多答案说使用 noconflict()。在 jquery 行之后添加它似乎可以解决问题。
我正在使用 jQuery (jQuery Core 2.1.4) 来开发我的 Shiny 应用程序的一部分。此外,我正在使用新的 plotly
包来渲染绘图。 jQuery 和 plotly
一样完美;但是,当同时使用两者时,plotly
中的图消失了。调用 jQuery 似乎是原因。
Is there a work-around that allows to use jQuery and
plotly
(specificallyggplotly
) in the same 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))
谢谢!
解决方法:需要使用JQuery的noconflict()。在 行加载 jquery.
之后添加tags$head(tags$script("$.noConflict(true);")),
说明:JQuery 已被 Shiny 默认加载。您可以通过查看任何 Shiny 应用程序页面的源代码来了解这一点,您会看到它已加载 jquery。当我 运行 您的应用程序并查看 JavaScript 控制台中的错误时,我收到了 st运行ge 错误,表明 JQuery 的某些内容无法正常工作。所以我想"hmm jquery is definitely loaded. It's actually loaded twice. But it's not working when I load it twice. Let's Google that!"。因此,如果您 Google 了解如何在一个页面上加载 jquery 两次,您会看到很多答案说使用 noconflict()。在 jquery 行之后添加它似乎可以解决问题。