我正在尝试制作一个在图形上方绘制点的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)
答案 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)