在使用多个sankeyNetwork(NetworkD3)进行标记时控制Firefox中的打印大小
这是一次类似事件的后续行动 我也有同样的问题,但是当从R Markdown编织到HTML时。有了@CJYetman发布的解决方案,我能够为我的sankey找到正确的尺寸,但只有第一个 我尝试添加在使用多个sankeyNetwork(NetworkD3)进行标记时控制Firefox中的打印大小,r,r-markdown,sankey-diagram,htmlwidgets,networkd3,R,R Markdown,Sankey Diagram,Htmlwidgets,Networkd3,这是一次类似事件的后续行动 我也有同样的问题,但是当从R Markdown编织到HTML时。有了@CJYetman发布的解决方案,我能够为我的sankey找到正确的尺寸,但只有第一个 我尝试添加onRender并每次更新方括号中的数字,但我一定是做错了什么。以下是完整的R标记代码(编织为HTML时仅呈现第一个图表): --- 标题:“测试” 作者:“CS” 日期:“2018年8月2日” 输出: html_文档:默认值 pdf_文档:默认值 --- ```{r设置,include=FALSE} k
onRender
并每次更新方括号中的数字,但我一定是做错了什么。以下是完整的R标记代码(编织为HTML时仅呈现第一个图表):
---
标题:“测试”
作者:“CS”
日期:“2018年8月2日”
输出:
html_文档:默认值
pdf_文档:默认值
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=TRUE)
```
```{r}
库(htmlwidgets)
图书馆(网络3)
图书馆(magrittr)
节点=data.frame(“name”=因子(如.character(1:9)),
“组”=as.字符(c(1,2,2,3,3,4,4,4)))
links=as.data.frame(矩阵(byrow=T,ncol=3,c(
0, 1, 1400,
0, 2, 18600,
1, 3, 400,
1, 4, 1000,
3, 5, 100,
3, 6, 40,
3, 7, 20,
3, 8, 4
)))
名称(链接)=c(“源”、“目标”、“值”)
链接
```
此图表在firefox中运行良好:
```{r}
sn11)只使用一次htmlwidgets::onRender()
函数,否则JavaScript何时运行以及运行时会或不会存在哪些其他元素就不太清楚了
2) 在htmlwidgets::onRender()
函数中(理想情况下,在渲染最后一个sankeyNetwork时运行),从每个渲染的sankeyNetwork中删除viewbox
3) 要使用htmlwidgets::onRender()函数运行多个JavaScript命令,请将所有命令包装在(JavaScript)函数中
然后可以根据需要专门针对页面上的任意多个htmlwidget
,例如
onRender(sn,'function(el){el.querySelector(“svg”).removeAttribute(“viewBox”)})
onRender(sn2,'function(el){el.querySelector(“svg”).removeAttribute(“viewBox”)}')
---
title: "test"
author: "CS"
date: "02/08/2018"
output:
html_document: default
pdf_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r}
library(htmlwidgets)
library(networkD3)
library(magrittr)
nodes = data.frame("name" = factor(as.character(1:9)),
"group" = as.character(c(1,2,2,3,3,4,4,4,4)))
links = as.data.frame(matrix(byrow = T, ncol = 3, c(
0, 1, 1400,
0, 2, 18600,
1, 3, 400,
1, 4, 1000,
3, 5, 100,
3, 6, 40,
3, 7, 20,
3, 8, 4
)))
names(links) = c("source","target","value")
links
```
this chart works fine in firefox:
```{r}
sn1 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12)
htmlwidgets::onRender(sn1, 'document.getElementsByTagName("svg")[0].setAttribute("viewBox", "")')
```
but this one doesn't display at all when knitted:
```{r}
sn2 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12, sinksRight = FALSE)
htmlwidgets::onRender(sn2, 'document.getElementsByTagName("svg")[1].setAttribute("viewBox", "")')
```
and neither does this one:
```{r}
sn3 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12, sinksRight = FALSE)
htmlwidgets::onRender(sn3, 'document.getElementsByTagName("svg")[2].setAttribute("viewBox", "")')
```
---
title: "test"
author: "CS"
date: "02/08/2018"
output:
html_document: default
pdf_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r}
library(htmlwidgets)
library(networkD3)
library(magrittr)
nodes = data.frame("name" = factor(as.character(1:9)),
"group" = as.character(c(1,2,2,3,3,4,4,4,4)))
links = as.data.frame(matrix(byrow = T, ncol = 3, c(
0, 1, 1400,
0, 2, 18600,
1, 3, 400,
1, 4, 1000,
3, 5, 100,
3, 6, 40,
3, 7, 20,
3, 8, 4
)))
names(links) = c("source","target","value")
links
```
this chart works fine in firefox:
```{r}
sn1 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12)
sn1
```
but this one doesn't display at all when knitted:
```{r}
sn2 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12, sinksRight = FALSE)
sn2
```
and neither does this one:
```{r}
sn3 <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
NodeGroup = "group", fontSize = 12, sinksRight = FALSE)
htmlwidgets::onRender(sn3, jsCode =
'function(){
document.getElementsByTagName("svg")[0].setAttribute("viewBox", "");
document.getElementsByTagName("svg")[1].setAttribute("viewBox", "");
document.getElementsByTagName("svg")[2].setAttribute("viewBox", "");
}')
```