在R中另一个图上单击时更改图的限制

时间:2018-09-04 13:45:18

标签: r plot shiny hover

我需要显示两个图。第一个图是主要散点图。每次单击第一个绘图中的一个点时,都必须更改第二个绘图。因此,我需要类似于https://davidgohel.github.io/ggiraph/index.html

的图片的行为

更准确地说,第一个图的每个点必须与第二个图的x极限关联。

我找到了一个相应的示例How to display many points from plotly_click in R Shiny? 并进行相应的修改

library(ggplot2)
library(plotly)
library(shiny)

ui <- fluidPage(
  plotlyOutput("plot1"),
  plotlyOutput("plot2")
)

range2=1000000
p1x=runif(10)
p1y=runif(10)
p1t=runif(10)*range2

times=seq(1,range2)
#ys=cumsum(rnorm(range2)/sqrt(range2))
ys=runif(range2)


plot2xlim=c(1000,2000)
p2 <- plot_ly()
p2 <- add_trace(p2, x = times, y = ys, type = "scattergl", mode = "lines",
                line = list(width = 1, color = "blue"))

server <- function(input, output, session) {
  # make plotly plot
  output$plot1 <- renderPlotly({
    g <- ggplot()+geom_point(aes(x=p1x,y=p1y))
    ggplotly(g)
  })
  output$plot2 <- renderPlotly({
    selpoint <- event_data("plotly_click")$pointNumber[1]+1
    plot2xlim <- c(p1t[selpoint]-500,p1t[selpoint]+500)
    p2 <<- layout(p2, xaxis = list(range = plot2xlim), 
                  yaxis = list(range = c(0, 1)))
    p2
  })
}
shinyApp(ui, server)

但是,由于plot2是为海量数据构建的,因此代码的运行速度非常慢。因此,重建它需要很多时间。

有没有一种方法可以不在每次点击时重绘第二张图,而只是改变其x极限?

1 个答案:

答案 0 :(得分:1)

似乎没有办法解决此问题,因为图形中的每个更改/查询都意味着图形的重新渲染,因为每次每次在数据点上单击数据点时,Shiny都会向第二个图形发送新数据。第一张图。