recharts 和弦图

作者: 李小夭 | 来源:发表于2017-10-25 22:58 被阅读130次

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

    ● 矩阵模式: 一个数据框,其中一列为节点名,余下的是一个矩阵。将节点名赋值给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

    相关文章

      网友评论

        本文标题:recharts 和弦图

        本文链接:https://www.haomeiwen.com/subject/stocpxtx.html