首先,加载recharts
:
library(recharts)
力导向布局图包括两类:
关键是:
rbind
将两者合并。如果未提供节点数据框,recharts会基于联结数据框自动构建。相应地,提供[x, x1, series/relation, weight/value]数据框。echartr(data, x, <y>, <series>, <t>, <type>, <subtype>)
参数 | 要求 |
---|---|
data |
数据框格式的源数据 |
x |
文本型自变量,其他类型转为因子后计算。节点/联结模式下,必须提供 |
y |
数值型应变量。节点/联结模式下,只传入 |
series |
数据系列变量,转为因子后计算。如果提供多个变量,只传入第一个。 |
t |
时间轴变量,转为因子后计算。如提供多个变量,只传入第一个。 |
type |
‘force’/‘force_curve’, ‘force_line’. |
subtype |
|
grpmtx <- matrix(c(11975, 5871, 8916, 2868, 1951, 10048, 2060, 6171, 8010, 16145,
8090, 8045, 1013, 990, 940, 6907), byrow=TRUE, nrow=4)
grpmtx <- as.data.frame(grpmtx)
names(grpmtx) <- paste0('Group', 1:4)
grpmtx$Name <- paste0('Group', 1:4)
knitr::kable(grpmtx, align=c('lllll'))
Group1 | Group2 | Group3 | Group4 | Name |
---|---|---|---|---|
11975 | 5871 | 8916 | 2868 | Group1 |
1951 | 10048 | 2060 | 6171 | Group2 |
8010 | 16145 | 8090 | 8045 | Group3 |
1013 | 990 | 940 | 6907 | Group4 |
数据框的前四列就是一个矩阵,而最后一列则是名称向量。所以其数据结构符合矩阵模式的要求。
矩阵模式可以转换为节点/联结模式。Matrix[i, j]代表了两个节点(i & j)和一个联结(i -> j)。
str(yuNetwork)
## List of 2
## $ nodes:'data.frame': 49 obs. of 3 variables:
## ..$ name : chr [1:49] "曾麟书" "曾国藩" "曾纪泽" "曾纪鸿" ...
## ..$ series: chr [1:49] "Root" "Node 1" "Node 2" "Node 2" ...
## ..$ value : num [1:49] 3 9 3 3 3 3 6 3 3 6 ...
## $ links:'data.frame': 49 obs. of 4 variables:
## ..$ source : chr [1:49] "曾麟书" "曾麟书" "曾麟书" "曾国藩" ...
## ..$ target : chr [1:49] "曾国藩" "曾国荃" "曾国潢" "曾纪泽" ...
## ..$ relation: chr [1:49] "父子" "父子" "父子" "父子" ...
## ..$ weight : num [1:49] 1 1 1 1 1 1 1 1 1 1 ...
yuNetwork
数据集包含一个节点数据框(nodes)及一个联结数据框(links)。可以合并为一个数据框。
name
: 节点名称series
: 节点所属数据系列value
: 节点的重要性分值source
和target
: 定义了联结的方向relation
: 联结的名称weight
: 联结的重要性分值nodes <- cbind(yuNetwork$nodes[,1], NA, yuNetwork$nodes[,2:3],
stringsAsFactors=FALSE)
names(nodes) <- names(yuNetwork$links)
yu <- rbind(yuNetwork$links, nodes, stringsAsFactors=FALSE)
设type
为’force’。
echartr(yu, c(source, target), weight, relation, type='force') %>%
setTitle("Yu Family of Shaoxing") %>% setTheme(palette=c(
'tan3','green3','green2','lawngreen','olivedrab1'))
echartr(grpmtx, Name, c(Group1, Group2, Group3, Group4), type='force_line') %>%
setTitle('Test Data', 'Force with ribbon')
设type
为’force_line’。
echartr(yu, c(source, target), weight, relation, type='force_line') %>%
setTitle("Yu Family of Shaoxing") %>% setTheme(palette=c(
'tan3','green3','green2','lawngreen','olivedrab1'))
用year
列作为时间轴。
echartr(deutsch, c(club, player), weight, role, t=year,
type='force', sub='arrow') %>%
setTitle('Club Orientation of Deutsch Soccer Team')
接下来可以配置控件、添加标注点/标注线,以及美化成图。
参考相关函数,尽情探索吧。