多页Flex Dashboard绘图具有不正确的缩放级别

时间:2016-06-24 18:23:49

标签: r d3.js knitr htmlwidgets flexdashboard

编辑看来问题与NetworkD3中缺少“调整大小”方法有关:https://github.com/rstudio/flexdashboard/issues/68#issuecomment-228521468

当我创建2个SankeyNetwork图并希望将它们显示在Flex Dashboard的不同页面上时,我遇到了一个问题。

第一个图表在第一页上加载没有问题 - 看起来应该完全正确。

然而,当我翻到第二页时,第二个SankeyNetwork情节被大幅放大 - 使其无法读取。单击“刷新”会自动修复绘图 - 将其恢复为正确的视角。然后 - 当我点击回到第一页时 - 该绘图以相同的方式放大。

我在第一页或第二页上放置哪个情节似乎并不重要...是否需要更改某种缓存设置?

Zoomed in Plot on 2nd page

Plot after right clicking and selecting 'Refresh'

修改 下面是示例代码 - 在RStudio中的FlexDashboard模板中创建,并利用NetworkD3创建者提供的SankeyNetwork示例。在此

---
title: "Example"
output: 
  flexdashboard::flex_dashboard
---
Page 1
==================
```{r setup, include=FALSE}
library(flexdashboard)
library(networkD3)

URL <- paste0(
        "https://cdn.rawgit.com/christophergandrud/networkD3/",
        "master/JSONdata/energy.json")
Energy <- jsonlite::fromJSON(URL)
# Plot
s1<-sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             units = "TWh", fontSize = 12, nodeWidth = 30)
```

### Page 1 {data-width=650}

```{r}
  s1

```

Page 2
==================

### Page 2 {data-width=350}

```{r}
s1
```

4 个答案:

答案 0 :(得分:2)

我相信这个pull request应该可以部分解决问题。请测试和验证。不幸的是,该解决方案需要一些权衡。我尝试在pull请求中讨论这些内容,但总的来说我的观点是非flexdashboard上下文应该占优势,所以我保留了viewBox resize机制,只会在heightwidth为0.感谢您的提示。希望这对你有用。

这是live example

答案 1 :(得分:0)

我怀疑这是flexdashboard的问题,因为我遇到了同样的问题。见gist

更新:这是由于htmlwidget resize函数没有得到适当的修正。 (我试图修复小部件)

答案 2 :(得分:0)

当我使用新列并设置大小时,此问题消失。我打赌这会解决你的问题

示例:

列{data-width = 650}

答案 3 :(得分:0)

我可以按照顶部帖子中描述的步骤来解决我的问题:

https://github.com/christophergandrud/networkD3/issues/122#issuecomment-228551872

在sankeyNetwork.js中注释掉viewBox代码,并取消注释调整大小功能代码