部署到闪亮服务器后找不到Plotly变量

时间:2018-03-02 08:19:33

标签: r shiny plotly shiny-server

我创建了一个Shiny应用程序,其中包含一些Plotly对象。在RStudio中预览时,一切正常。但是,当我将应用程序部署到Shiny服务器(内部部署)并打开应用程序时,图表未显示。在浏览器(Chrome或Safari)中查看开发者控制台时,我看到以下错误Can't find variable: Plotly指向了plotly.js的第141行,在以下代码中为var plot = Plotly.plot(graphDiv, x)

  //if no plot exists yet, create one with a particular configuration

  if (!instance.plotly) {

    var plot = Plotly.plot(graphDiv, x);
    instance.plotly = true;
    instance.autosize = x.layout.autosize || true;
    instance.width = x.layout.width;
    instance.height = x.layout.height;

我在Chrome和Safari中对此进行了测试,并且它在两种浏览器中都有效,但是当我在Chrome中刷新页面时,这些图表有时会起作用。

因此,为了进一步测试,我从Plotly网站获取了this code,并将其部署到我们的Shiny服务器环境中,以查看是否发生了相同的行为,情况就是如此。因此我不认为我犯了编码错误。

我正在使用以下软件包版本:

  • plotly 4.7.1
  • 有光泽的1.0.5
  • htmlwidgets 1.0
  • Shiny Server v1.5.3.838

有谁知道如何解决这个问题?我是否遗漏了一些软件包,或者是否需要在Shiny服务器中配置某些内容才能使其正常工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您可能需要的是renderPlotly而不是服务器中的renderPlot。如果执行此操作,则该图将显示在查看器上,但不会显示在闪亮的弹出窗口(空白图)中,并且在部署时将无法使用。将renderPlot替换为renderPlotly的一个示例是:

ui <- dashboardPage(skin = "blue",
                dashboardHeader(title= "Fig. 11: State Forecasting and Nowcasting", titleWidth = 450),
                dashboardSidebar(disable=TRUE),
                dashboardBody(
                  fillPage(padding = 0,
       box(title="", id="normal", solidHeader = TRUE, status = "primary", width=7,
                plotlyOutput("plot1", height = 250)), 
        box(title="State to Examine", background = "black", width=5, 
                selectInput("variable", "State:", choices= sort(unique(afteradd2$State)), selected="Ohio")),
       box(title="Forecast Length", background = "black", width=5, 
                selectInput("variable.two", "Forecast:", choices= c("Nowcast", "Three Month Forecast",
                                                             "Six Month Forecast"), selected="Nowcast"))
        )))
server <- function(input, output) {


output$plot1<- renderPlotly({
par(mfrow=c(1,1))
par(mar = c(4, 5, 4, 4)) 
fstate(input$variable, input$variable.two)})}


shinyApp(ui=ui, server=server)

尽管看不到您的代码,但是很难确定。如果这不是您的问题,可以共享您的代码,以便我提供帮助吗?