一、数据结构(两种模式)
● 矩阵模式: 一个数据框,其中一列为节点名,余下的是一个矩阵。将节点名赋值给x, 矩阵赋值给y。
● 节点/联结模式:一个节点数据框[x, NA, series, weight]和一个联结数据框[x, x1, relation, value]。用rbind将两者合并。如果未提供节点数据框,recharts会基于联结数据框自动构建。相应地,提供[x, x1, series/relation, weight/value]数据框。
二、参数说明
echartr(data, x, <y>, <series>, <t>, <type>, <subtype>)
三、数据准备:
1. 矩阵模式
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 |
● 矩阵模式: 一个数据框,其中一列为节点名,余下的是一个矩阵。将节点名赋值给x, 矩阵赋值给y。
数据框的前四列就是一个矩阵,而最后一列则是名称向量。所以其数据结构符合矩阵模式的要求。
矩阵模式可以转换为节点/联结模式。Matrix[i, j]代表了两个节点(i & j)和一个联结(i -> j)。
2. 节点Node/联结link模式
knitr::kable(deutsch[deutsch$year==2014,])
player | club | weight | role | year |
---|---|---|---|---|
Kruse | Monchengladbach | 1 | Fw | 2014 |
Kramer | Monchengladbach | 1 | Mf | 2014 |
Neuer | Bayern | 1 | Gk | 2014 |
Boateng | Bayern | 1 | Df | 2014 |
Lahm | Bayern | 1 | Df | 2014 |
Kroos | Bayern | 1 | Mf | 2014 |
Muller | Bayern | 1 | Mf | 2014 |
Gotze | Bayern | 1 | Fw | 2014 |
Badstuber | Bayern | 1 | Df | 2014 |
Hummels | Dortmund | 1 | Df | 2014 |
Weidenfeller | Dortmund | 1 | Gk | 2014 |
Reus | Dortmund | 1 | Df | 2014 |
Gundogan | Dortmund | 1 | Md | 2014 |
● 节点/联结模式:一个节点数据框[x, NA, series, weight]和一个联结数据框[x, x1, relation, value]。用rbind将两者合并。如果未提供节点数据框,recharts会基于联结数据框自动构建。相应地,提供[x, x1, series/relation, weight/value]数据框。
数据框内找不到数值型矩阵结构,所以被识别为节点/联结模式。由于第一、二列么有NA,所以recharts会基于所给的数据框构建一个节点数据框。
四、图表展现
1. 带缎带的和弦图
设type为’chord’,subtype为’ribbon’。
echartr(grpmtx, Name, c(Group1,Group2,Group3,Group4),
type='chord',subtype='ribbon + asc + descsub + hidelab + scaletext')
2. 无缎带的和弦图(单向联结)
echartr(deutsch[deutsch$year==2014,],c(club,player),weight,role,
type='chord',subtype='asc + descsub + rotatelab')
3. 双向联结
带和弦图,必须将源数据修改为双向联结。
构建双向联结的矩阵:
knitr::kable(with(deutsch[deutsch$year==2014,], table(player, club)))
deutsch14 <- deutsch[deutsch$year==2014,]
deutsch14 <- rbind(deutsch14, deutsch14)
deutsch14[14:26, c('player', 'club')] <- recharts:::exchange(
deutsch14[14:26, 'player'], deutsch14[14:26, 'club'])
knitr::kable(with(deutsch14, table(player, club)))
作图:
echartr(deutsch14,c(club,player),weight,role,type='chord',
sub = 'asc + descsub + rotatelab + ribbon')
另一个例子:
mideast <- as.data.frame(mideast, col.names=mideast[1,], stringsAsFactors=FALSE)
names(mideast) <- mideast[1,]
mideast <- mideast[2:16,]
me <- data.table::melt(mideast, id=NA)
me <- me[!is.na(me$value),]
me$series <- strsplit(me$value, '/')
me$value <- sapply(me$series, function(x) as.numeric(x[2]))
me$series <- sapply(me$series, function(x) x[1])
names(me) <- c('source', 'target', 'value', 'series')
str(me)
作图:
echartr(me,c(source,target),value,series,type='chord',sub='ribbon')
更多功能请戳官方链接:madlogos.github.io/recharts/Basic_Plots_01_Scatterplot_cn.html#-en