在渲染后将元素添加到Shiny中的绘图中

时间:2019-09-03 15:16:23

标签: shiny

在应用程序中绘制图后,我正在研究添加斜线的选项,并使这些斜线保留在图对象的一部分,即,如果x轴发生变化,则保留该斜线。我知道我可以重新定义绘制的对象,但是由于绘图有多个不同的选项,因此此方法将无法工作,因为我将有无数次不同的绘图调用,并且如果需要,我将无法跟踪所有对象改变些什么。 是否有与dlypr%>%相似的东西可以用于闪亮的图,或者具有相同影响的任何东西?

我尝试单独运行,如下面的代码所示。但是,这不会在图上添加线。

#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
#    http://shiny.rstudio.com/
#

library(shiny)

x <- faithful[, 2] 
x2 = x

# Define UI for application that draws a histogram
ui <- fluidPage(

  # Application title
  titlePanel("Old Faithful Geyser Data"),

  # Sidebar with a slider input for cut
  sidebarLayout(
    sidebarPanel(
      numericInput("lines",
                   "Vertical Line",
                   min = 1,
                   value = 60),
      actionButton("add", "Add?"),
      numericInput("xlimL", "Lower x", value=0),
      numericInput("xlimU", "Upper x", value=50)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

server <- function(input, output) {

  data <- reactiveValues(x2 = x2)

  output$distPlot <- renderPlot({
    plot(data$x2, xlim = c(input$xlimL, input$xlimU))
  })

  observeEvent(input$add,{
    abline(v = input$lines)
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

我在添加了斜线的图之后,当我更改x限制时,它与图保持一致,并且无需多次renderPlot调用即可执行此操作。

谢谢!

1 个答案:

答案 0 :(得分:1)

因此,可以通过将数据设为reactiveValue并添加lines = NULL来做到这一点,但是服务器部分如下:

server <- function(input, output) {

  data <- reactiveValues(x2 = x2, lines = NULL)

  output$distPlot <- renderPlot({
    plot(data$x2, xlim = c(input$xlimL, input$xlimU))
    abline(v =  data$lines)
  })

  observeEvent(input$add,{
    data$lines = c(data$lines, input$lines)
  })
}