通过 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$x
和 input$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语言将ggplot2对象转化为plotly对象并通过shiny将可视化结果在应用程序或者网页中显示出来