听说你的桑基图也无法保存?
测试开头

今天是生信星球陪你的第786天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

测试结尾



花花写于2021.2.8
我承认我膨胀了,我不按时写推文了,我错了,我来了,得跟豆豆商量一下不写推文的惩罚机制了,检讨,反思,过年补课。
言归正传,之前写过画桑基图和网络图的推文:来玩一下会动的网络图和桑基图。今天发现,桑基图居然没办法直接保存为pdf,png这些常用的格式。搜索了一下,发现需要借助外力–webshot包。
1.画桑基图
library(tidyverse)
library(navdata)
library(networkD3)
data("phone.call2")
nodes <- phone.call2$nodes;head(nodes)
## # A tibble: 6 x 2
## id label
## <int> <chr>
## 1 1 France
## 2 2 Belgium
## 3 3 Germany
## 4 4 Danemark
## 5 5 Croatia
## 6 6 Slovenia
edges <- phone.call2$edges;head(edges)
## # A tibble: 6 x 3
## from to weight
## <int> <int> <dbl>
## 1 1 3 9
## 2 2 1 4
## 3 1 8 3
## 4 1 9 4
## 5 1 10 2
## 6 1 11 3
nodes_d3 <- mutate(nodes, id = id - 1);head(nodes_d3)
## # A tibble: 6 x 2
## id label
## <dbl> <chr>
## 1 0 France
## 2 1 Belgium
## 3 2 Germany
## 4 3 Danemark
## 5 4 Croatia
## 6 5 Slovenia
edges_d3 <- mutate(edges, from = from - 1, to = to - 1);head(edges_d3)
## # A tibble: 6 x 3
## from to weight
## <dbl> <dbl> <dbl>
## 1 0 2 9
## 2 1 0 4
## 3 0 7 3
## 4 0 8 4
## 5 0 9 2
## 6 0 10 3
p = sankeyNetwork(
Links = edges_d3, Nodes = nodes_d3,
Source = "from", Target = "to",
NodeID = "label", Value = "weight",
fontSize = 16, unit = "Letter(s)")
p

2.保存
主要是因为这个桑基图是互动式的。只能导出为html,没有其它选项。如果是forceNetwork出的图,可以在这里手动点保存输出,可桑基图不行。
network3D自带一个saveNetwork函数,只能导出html。
saveNetwork(p,"sankey.html")
这个函数刚好可以对接webshot,把html保存为pdf或者png,干就完事!
这个包需要依赖phantomjs,我搜到的结果是需要自己装,结果发现作者把安装的动作也写成R语言函数了,非常舒适。
library(webshot)
if(!is_phantomjs_installed()){
install_phantomjs()
}
is_phantomjs_installed()
## [1] TRUE
只要上面是TRUE了,保存就没有问题。
webshot("sankey.html" , "sankey.png")
webshot("sankey.html" , "sankey.pdf")
插个小广告! 生信零基础入门学习小组 生信入门班(四周线上直播课,长期开班) 数据挖掘班(医生/医学生首选,三周线上直播课,长期开班) 一起来学单细胞吗? 生信星球答疑公告
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!