Вот частичный ответ. Я не могу заставить его работать, но, возможно, кто-то увидит что-то очевидное. Я использовал ggplot2
вместо ggvis
для функции geom_vline()
, которая создает вертикальную линию.
Что работает:
В событии input$plot_hover
мы присваиваем координату x
переменной (h
), а затем используем эту переменную в качестве аргумента xintercept
для функции geom_vline()
, которая рисует вертикальную линию.
Проблема:
Поскольку это происходит в реактивной среде, при каждом обновлении h
сбрасывается, поэтому строка исчезает примерно через секунду после первого появления.
Что я пробовал:
Я попытался присвоить h
второй переменной t
, чтобы сохранить ее между обновлениями. Это не сработало, поэтому я создал третью переменную prev_t
и, когда не было ввода (is.null(input$plot_hover) == TRUE)
, оставил t
как prev_t
. Это тоже не работает, но у меня нет кучи времени, чтобы пробовать разные вещи.
Вот код:
library(ggplot2)
library(shiny)
ui <- fluidPage(
fluidRow(
column(width = 12,
plotOutput("plot1", height = 350,hover = hoverOpts(id ="plot_hover"))
)
)
)
server <- function(input, output) {
#h <- reactive(input$plot_hover)
prev_t <- vector()
output$plot1 <- renderPlot({
if(!is.null(input$plot_hover)){
x <- input$plot_hover
h <- x$x
t <- h
# the below isnt quite working
# I was trying to store t between updates to make the line stay on
# the graph until there was a second hover event
################### !!! ###################
} else if(is.null(input$plot_hover)) {
t <- prev_t
}
prev_t <- t
################## !!! ####################
ggplot(mtcars, aes(x=mpg,y=disp,color=factor(cyl))) + geom_point() + geom_vline(xintercept = t)
})
}
shinyApp(ui, server)
Надеюсь, это, возможно, поставит вас на другой путь или немного поможет. Если кто-то увидит что-то, что может решить эту проблему, пожалуйста, дайте мне знать.
person
Chris C
schedule
19.12.2015