在Shiny应用程序中的情节上渲染points()函数

时间:2018-08-29 20:03:14

标签: r shiny

我正在尝试制作一个在图形上方绘制点的Shiny应用程序。我不确定如何同时显示绘图和点,因为似乎只使用了最后一个renderPlot()。

我怎么能一次绘制两个图?

library(shiny)

server <- function(input, output, session) {          
  # data
  x <- c(1,3,4,6,2,4,6,8,6,3)
  y <- c(4,5,2,4,2,1,2,5,7,8)
  df <- data.frame(x,y)

  # plot
  output$plot <- renderPlot(plot(df[[1]],df[[2]]))        
  output$plot <- renderPlot(points(rnorm(200), rnorm(200)))
}

ui <- fluidPage(
  plotOutput("plot")
)

shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:0)

您可以将数据存储在reactiveValues()中。然后更新并绘制无功值数据。

完整的示例如下:

library(shiny)

x <- c(1, 3, 4, 6, 2, 4, 6, 8, 6, 3)
y <- c(4, 5, 2, 4, 2, 1, 2, 5, 7, 8)

server <- function(input,  output,  session) {          
  global <- reactiveValues(data = data.frame(x,  y))

  observeEvent(input$add,{
    global$data <- rbind(global$data, data.frame(x = rnorm(20), y = rnorm(20)))
  })

  output$plot <- renderPlot(plot(global$data$x, global$data$y))
}

ui <- fluidPage(
  actionButton("add", "Add"),
  plotOutput("plot")
)

shinyApp(ui = ui, server = server)

答案 1 :(得分:0)

我知道这是一个老问题,但我只是自己想知道它并想出了一个不同的解决方案。

您可以通过 plot()points()list() 调用放在一起。我决定用红色绘制这些点以帮助区分。

library(shiny)

server <- function(input, output, session) {          
  # data
  x <- c(1,3,4,6,2,4,6,8,6,3)
  y <- c(4,5,2,4,2,1,2,5,7,8)
  df <- data.frame(x,y)
  
  # plot                    # use the list() function to put them together
  output$plot <- renderPlot(list(plot(df[[1]],df[[2]],
                                      points(rnorm(200), rnorm(200), col = 2)
                                      )
                                 )
  )
}

ui <- fluidPage(
  plotOutput("plot")
)

shinyApp(ui = ui, server = server)