缺少通过Plotly在Shiny应用程序中绘制的数据

时间:2019-01-25 18:35:03

标签: r shiny plotly

下午好,

我正在尝试从ggplot2的经济学数据集中绘制一个简单的时间序列。应用会加载,然后显示具有正确轴的图表,但不包含任何绘图数据。任何帮助将不胜感激。最好,乔

library(shiny)
library(plotly)
library(tidyverse)

df <- economics

datalst = colnames(df)

ui <- pageWithSidebar(
  headerPanel("test"),
  sidebarPanel(
    selectInput(inputId = "x",
                label = "Choose the x axis",
                datalst),
    selectInput(inputId = "y",
                label = "Choose the y axis",
                datalst, datalst[[2]])


  ),
  mainPanel(

    plotlyOutput("plot")

  )
)

server <- function(input, output) {

    dataset  <- reactive({
      df[, c(input$x, input$y)]
    })


    output$plot = renderPlotly({

      plot_ly(dataset(), x = ~input$x, y = ~input$y,type = 'scatter', mode = 'lines')

    })

}  

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

这里的技巧是避免非标准评估,因为input$xinput$y评估为字符串,而在您的示例中使用plotly时则需要〜后面的裸列名称。您可以使用以下方法解决此问题:

server <- function(input, output) {

    dataset  <- reactive({
      df[, c(input$x, input$y)]
    })
    output$plot = renderPlotly({
      plot_ly(x = dataset()[[input$x]], y = dataset()[[input$y]],type = 'scatter', mode = 'lines')
    })

}  

进一步的改进可能是将反应堆“分成”两部分,从而使情节的输入无效并仅在相应的输入更改时重新计算:

server <- function(input, output) {

    dataset_x  <- reactive({
      df[, input$x]
    })

    dataset_y  <- reactive({
      df[, input$y]
    })
    output$plot = renderPlotly({
      plot_ly(x = dataset_x()[[1]], y = dataset_y()[[1]], type = 'scatter', mode = 'lines')
    })

}