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

Posted

技术标签:

【中文标题】通过 Plotly 在 Shiny 应用程序中绘制的缺失数据【英文标题】:missing data charted within Shiny app via Plotly 【发布时间】:2019-06-19 15:06:39 【问题描述】:

下午好,

我正在尝试从 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)

【问题讨论】:

plot_ly(x = dataset()[[input$x]], y = dataset()[[input$y]],type = 'scatter', mode = 'lines')跨度> @ ibusett,效果很好!谢谢! 很高兴它有帮助,我现在也发布了答案,因为我认为它可以使其他人受益。 【参考方案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')
    )

  

【讨论】:

以上是关于通过 Plotly 在 Shiny 应用程序中绘制的缺失数据的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny 为 Plotly 折线图选择轨迹?

R语言将ggplot2对象转化为plotly对象并通过shiny将可视化结果在应用程序或者网页中显示出来

在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动

快速切换标签时,Shiny Plotly Plot 卡住了

在 Plotly/Shiny 中使用代理接口动态更改数据

在基于 HTML 模板的 Shiny App 中使用 Plotly 失败