使用R画桑基图(流程图)
来源:互联网 发布:柯桥区干部网络学堂 编辑:程序博客网 时间:2024/05/28 15:18
桑基图可以用来表示各个节点之间转换
在R中可以直接定义点点之间的关系后使用相应的package画桑基图:
方法一:
riverplot
library(riverplot)# 构造连接节点的数据框edges = data.frame(N1 = paste0(rep(LETTERS[1:4], each = 4), rep(1:5, each = 16)), N2 = paste0(rep(LETTERS[1:4], 4), rep(2:6, each = 16)), Value = runif(80, min = 2, max = 5) * rep(c(1, 0.8, 0.6, 0.4, 0.3), each = 16), stringsAsFactors = F)# 筛选80%的记录,以免每个点都对应到4个点edges = edges[sample(c(TRUE, FALSE), nrow(edges), replace = TRUE, prob = c(0.8, 0.2)),]head(edges)nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)#nodes$x = as.integer(substr(nodes$ID, 2, 2))nodes$y = as.integer(sapply(substr(nodes$ID, 1, 1), charToRaw)) - 65#rownames(nodes) = nodes$IDhead(nodes)# 添加颜色library(RColorBrewer)# 后面加调淡颜色palette = paste0(brewer.pal(4, "Set1"), "60")# 对每个节点生成相应的格式styles = lapply(nodes$y, function(n) { list(col = palette[n+1], lty = 0, textcol = "black")})names(styles) = nodes$ID# 以list的结构保存一遍调用rp <- list(nodes = nodes, edges = edges, styles = styles)class(rp) <- c(class(rp), "riverplot")plot(rp, plot_area = 0.95, yscale=0.06)
效果图见:
方法二:
使用包d3Network或者circlize,d3Network是调用D3的画图功能来实现,使用一下代码实现:
library(d3Network)d3links <- edgesd3nodes <- data.frame(name = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)d3nodes$seq <- 0:(nrow(d3nodes) - 1)d3links <- merge(d3links, d3nodes, by.x="N1", by.y="name")names(d3links)[4] <- "source"d3links <- merge(d3links, d3nodes, by.x="N2", by.y="name")names(d3links)[5] <- "target"names(d3links)[3] <- "value"d3links <- subset(d3links, select=c("source", "target", "value"))d3nodes <- subset(d3nodes, select=c("name"))# 画图并保存为html文件d3Sankey(Links = d3links, Nodes = d3nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", fontsize = 12, nodeWidth = 30, file = "TestSankey.html")
效果图:
备注:
(1)d3Network保存为HTML文件,有交互式效果;riverplot可选择保存为不同的图片类型
(2)操作中感觉使用riverplot更易调整
0 0
- 使用R画桑基图(流程图)
- 使用graphviz绘制流程图
- 使用graphviz绘制流程图
- 使用graphviz绘制流程图
- 使用Visio画流程图
- 使用graphviz绘制流程图
- git使用流程图
- 使用graphviz绘制流程图
- 使用 LaTeX 绘制流程图
- 使用planttml 画流程图
- Json格式数据使用流程图
- 使用graphviz画程序流程图
- 使用Xmind画流程图、脑图
- [latex]使用tikz画流程图
- Web流程图绘制使用raphael
- 自定义布局流程图及使用
- Atom-使用Markdown画流程图
- 流程图
- for循环流程
- 三个数中取出最大的两个
- 算法导论—快排及优化以及和STL sort 的比较
- my_strcpy
- c#读取XML
- 使用R画桑基图(流程图)
- [shuju]一道简单题 Uva 11991
- Android常见的问题
- 解决MySQL中死进程(一个联合查询耗时32s)
- JSP的内置对象
- Java中hash+salt的加密算法
- Eclipse Android安装APP时覆盖安装问题
- Oracle 行转字符串
- 获取xml字符串中的属性值