R- FlexDashboard/Plotly交互导致奇怪的滚动条行为



我有一个奇怪而令人沮丧的问题。当我在情节板(来自FlexDashboard包)中构建绘图图时,我在传奇中会得到一个非常烦人且完全不必要的滚动条。当某人试图单击一个点或关点时,滚动条抽搐,几乎不可能单击事物。仅在页面加载期间没有立即可见图表的标签时,此滚动条才会出现 - 即,如果页面加载一些其他选项卡。

我可以在情节板外面制作相同的图表,无论是在rstudio中都没有问题,也可以将其保存为HTMLWIDGET并将其加载到Chrome中。但是,当我在rstudio或chrome中加载故事板时,我会得到这个烦人的卷轴。无论是垂直的还是水平的传奇。

都存在卷轴。

ggplotly对象没有这个问题。

这是不必要的滚动条的一个示例。ggplotly图形很好,剧情一个具有滚动条。

---
title: "Untitled"
output: 
  flexdashboard::flex_dashboard:
    storyboard: true
---
```{r setup, include=FALSE}
library(flexdashboard)
```
### ggplot
```{r}
library(plotly)
carggplot <- ggplot(mtcars, aes(hp, mpg, fill = as.factor(carb))) +
    geom_point() +
    theme_bw()
ggplotly(carggplot)
```

### plotly
```{r}
carsplot <- plot_ly(
    data = mtcars,
    x = ~hp,
    y = ~mpg,
    color = ~as.factor(carb),
    type = "scatter",
    mode = "markers"
    )
carsplot
```

我找不到有关此问题的任何文档,尽管我发现有人使用Python界面发布了类似的问题。

我正在寻找一种完全关闭滚动条的方法(在保留传奇的同时),或者对滚动条的抽搐行为进行一些解释。

FlexDashboard为0.5,Plitly为4.7.1,R为64位3.4.1,Windows 7。

有很多活动部件正在回答您的问题。我不会详细介绍每个人,但仅短暂触摸它们。

背景

  1. 当传说的长度变得更长时,plotly.js图表的行为是设计的,它会自动插入卷轴。

  2. ggplotly图表没有发生这种情况,因为所有视觉样式都来自ggplot对象。

  3. 在这种情况下,
  4. flexdashboard是罪魁祸首,因为它如何动态拟合可用空间并告知plotly.js有关如何渲染的信息。值得注意的是,源html中的 svg

  5. 然后,解决方案是为了操纵 dom ,以隐藏/删除/更改有问题的元素。

潜在解决方案

我在下面提供的解决方案有点黑客。一个更永久的解决方案可能是与Rstudio的好人提出问题,以查看是否可以对包裹进行任何更改,这解决了您的问题。

如果将runtime: shiny添加到 yaml 标题中,则可以使用Dean Attali的出色shinyjs软件包。虽然我不是这个领域的专家,但我在您的 mre 中添加了几行,这些行从 class=scrollbar svg 中删除了 <rect>元素。重要的是要注意,您可能需要更改 javascript 我提出要更具体而不是删除您可能希望保留的元素。

更新到MRE

这是Rmd代码,其中有我进行了更改的注释。

---
title: "Untitled"
output: 
  flexdashboard::flex_dashboard:
    storyboard: true
  runtime: shiny
---
```{r setup, include=FALSE}
library(shinyjs)        # add package, note runtime option above in YAML
useShinyjs(rmd = TRUE)  # function needs to initialise js
library(flexdashboard)
library(plotly)
```
### ggplot
```{r}
library(plotly)
carggplot <- ggplot(mtcars, aes(hp, mpg, fill = as.factor(carb))) +
    geom_point() +
    theme_bw()
ggplotly(carggplot)
```

### plotly
```{r}
carsplot <- plot_ly(
    data = mtcars,
    x = ~hp,
    y = ~mpg,
    color = ~as.factor(carb),
    type = "scatter",
    mode = "markers"
    )
carsplot
runjs("$svg.selectAll('rect[class=scrollbar]').remove();") # run plain js to remove elements
```

n.b。在我发布时,我的结果不可靠,并且会进一步挖掘。

旧问题,但是如果其他人有同样的问题,我想把我的解决方案带到那里...

我也有同样的问题,我使用这种方法解决了它:

ggplotly(carggplot, height = 500)

我的传奇中有一个迷你滚动条,并在调用ggplotly()时像上述高度一样调整高度,使我能够适应使一切正常工作所需的正确高度。

最新更新