在小屏幕上绘制闪亮的损失登记事件图表

问题描述 投票:0回答:1

根据此页面上提供的信息,我制作了一个绘图,使用

event_register("plotly_selecting")
来监听数据点上的点击并用它做一些事情。

以下应用程序可以做到这一点。效果很好:

library(shiny)
library(plotly)

ui <- fluidPage(
  plotlyOutput("plot"),
  verbatimTextOutput("click")
  )

server <- function(input, output, session) {
  
  nms <- row.names(mtcars)
  
  output$plot <- renderPlotly({
    p <- plot_ly(mtcars, x = ~mpg, y = ~wt, customdata = nms)
    
    p %>% 
      layout(dragmode = "select") %>%
      event_register("plotly_selecting")
  })
  
  output$click <- renderPrint({
    d <- event_data("plotly_click")
    if (is.null(d)) "Click events appear here (double-click to clear)" else d
  })
}

shinyApp(ui, server)

我在shinyapps.io 上发布了我的应用程序。然后我想看看它在我的智能手机上的样子。我发现,显然,点击不会在小屏幕上注册。您可以看到上面的应用程序在桌面屏幕上运行良好:您单击一个数据点,事件就会被注册。

但是,如果您通过 DevTools 更改为智能手机屏幕,您会发现此功能丢失,如下图所示:

那么,如何让

plotly::event_data
和/或
plotly::event_register
在小屏幕上正常工作?

r shiny plotly
1个回答
0
投票

正如评论中提到的,该错误是由于

plotly.js
库中的旧版本
plotly
造成的。

一个快速的黑客修复方法是手动将依赖项更新为更新版本的

plotly.js
N.B.这没有任何保证,因为切换底层库可能会产生不可预见的后果)

library(here)
library(htmltools)

## download the newest evrsion of plotly
lnk <- "https://cdn.plot.ly/plotly-2.27.0.min.js"
dest_dir <- here("www")
dest_fn <- file.path(dest_dir, basename(lnk))

if (!file.exists(dest_fn)) {
  if (!dir.exists(dest_dir)) {
    dir.create(dest_dir)
  }
  download.file(lnk, dest_fn)
}

## switch dependency to newer version

# [...]
output$plot <- renderPlotly({
  p <- plot_ly(mtcars, x = ~ mpg, y = ~ wt, customdata = nms, 
               type = "scatter", mode = "markers")
  ## if you do not like using internal functions look for `plotly-main` in the deps
  idx <- plotly:::plotlyjsBundleIDX(p)
  p$dependencies[[idx]] <- htmlDependency("plotly-main",
                                          gsub("^\\D+((\\d+\\.?)+)\\..*$", "\\1", lnk),
                                          src = here("www"),
                                          script = basename(lnk))
  p %>% 
    layout(dragmode = "select") %>%
    event_register("plotly_selecting") 
})
© www.soinside.com 2019 - 2024. All rights reserved.