我有一个奇怪而令人沮丧的问题。当我在情节板(来自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。
有很多活动部件正在回答您的问题。我不会详细介绍每个人,但仅短暂触摸它们。
背景
-
当传说的长度变得更长时,
plotly.js
图表的行为是设计的,它会自动插入卷轴。 -
ggplotly
图表没有发生这种情况,因为所有视觉样式都来自ggplot
对象。
在这种情况下, flexdashboard
是罪魁祸首,因为它如何动态拟合可用空间并告知plotly.js
有关如何渲染的信息。值得注意的是,源html中的 svg 。然后,解决方案是为了操纵 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()
时像上述高度一样调整高度,使我能够适应使一切正常工作所需的正确高度。