recharts 和弦图

一、数据结构(两种模式)

● 矩阵模式: 一个数据框,其中一列为节点名,余下的是一个矩阵。将节点名赋值给x, 矩阵赋值给y。
● 节点/联结模式:一个节点数据框[x, NA, series, weight]和一个联结数据框[x, x1, relation, value]。用rbind将两者合并。如果未提供节点数据框,recharts会基于联结数据框自动构建。相应地,提供[x, x1, series/relation, weight/value]数据框。

二、参数说明
echartr(data, x, , , , , )
recharts 和弦图_第1张图片
参数说明
三、数据准备:
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')
recharts 和弦图_第2张图片
带缎带的和弦图
2. 无缎带的和弦图(单向联结)
echartr(deutsch[deutsch$year==2014,],c(club,player),weight,role,
        type='chord',subtype='asc + descsub + rotatelab')
recharts 和弦图_第3张图片
无缎带的和弦图(单向联结)
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')
recharts 和弦图_第4张图片
双向联结

另一个例子:

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')
recharts 和弦图_第5张图片
双向联结

更多功能请戳官方链接:madlogos.github.io/recharts/Basic_Plots_01_Scatterplot_cn.html#-en

你可能感兴趣的:(recharts 和弦图)