簡體   English   中英

Circlize migration plot缺少鏈接

[英]Circlize migration plot missing links

我試圖遵循Guy的R代碼,創建循環遷移圖。 我的文件類似於他用“migest”包(science / regions_custom)提供的文件。 我的數據文件示例是'regions_oceanos':

-   -   -   1   2   4   3
-   -   -   Pacífico    Índico  Mediterráneo    Atlántico
1   160,0,125   Pacífico    245.025 1.70210026  0.09857195  1.7337982
2   0,255,233   Índico  0.4165425   242.575 3.9052666   6.9741618
4   125,175,0   Mediterráneo    3.05222742  5.99567776  11.125  5.7953056
3   255,219,0   Atlántico   2.63735109  7.51662301  4.3093533   36.625

而R代碼是:

library("migest")
m<-read.table("region_reciente.txt", skip=2, stringsAsFactors=FALSE)
df1<-m[,1:3]
names(df1)<-c("order","rgb","region")
df1$region<-gsub("_", " ", df1$region)
m<-m[,-(1:3)]/1e06
m<-as.matrix(m)
dimnames(m)<-list(orig=df1$region,dest=df1$region)
library("plyr")
df1<-arrange(df1, order)
df1$region <- factor(df1$region, levels=df1$region)  
m<-m[levels(df1$region),levels(df1$region)]
df1$xmin <- 0
df1$xmax <- rowSums(m)+colSums(m)
n<-nrow(df1)
df1 <- cbind(df1, matrix(as.numeric(unlist(strsplit(df1$rgb,","))),nrow=n,   byrow=TRUE) )
names(df1)[ncol(df1)-2:0]<-c("r","g","b")
df1$rcol<-rgb(df1$r, df1$g, df1$b, max = 255)
df1$lcol<-rgb(df1$r, df1$g, df1$b, alpha=200, max = 255)
library("circlize")
par(mar=rep(0,4))
circos.clear()
circos.par(cell.padding=c(0,0,0,0), track.margin=c(0,0.1), start.degree = 90, gap.degree =4)
circos.initialize(factors = df1$region, xlim = cbind(df1$xmin, df1$xmax))
circos.trackPlotRegion(ylim = c(0, 1), factors = df1$region,     track.height=0.1, bg.border = NA, bg.col = NA, bg.lty =0, bg.lwd=0.0001,
panel.fun = function(x, y) {
    name = get.cell.meta.data("sector.index")
    i = get.cell.meta.data("sector.numeric.index")
    xlim = get.cell.meta.data("xlim")
    ylim = get.cell.meta.data("ylim")
    circos.text(x=mean(xlim), y=2.2, labels=name, facing = "bending", cex=0.8)
    circos.rect(xleft=xlim[1], ybottom=ylim[1], xright=xlim[2], ytop=ylim[2], 
             col = df1$rcol[i], border=df1$rcol[i])
    circos.rect(xleft=xlim[1], ybottom=ylim[1], xright=xlim[2]-rowSums(m)[i], ytop=ylim[1]+0.3, 
             col = "white", border = "white")
    circos.rect(xleft=xlim[1], ybottom=0.3, xright=xlim[2], ytop=0.32, col = "white", border = "white")
    circos.axis(labels.cex=0.8, direction = "outside", major.at=seq(0,floor(df1$xmax)[i]), minor.ticks=1,
             labels.away.percentage = 0.15)
})
df1$sum1 <- colSums(m)
df1$sum2 <- numeric(n)
df2<-cbind(as.data.frame(m),orig=rownames(m),  stringsAsFactors=FALSE)
df2<-reshape(df2, idvar="orig", varying=list(1:n), direction="long",      timevar="dest", time=rownames(m),  v.names = "m")
df2<-arrange(df2,desc(m))
df2<-subset(df2, m>quantile(m,0.65))
for(k in 1:nrow(df2)){
    i<-match(df2$orig[k],df1$region)
    j<-match(df2$dest[k],df1$region)
    circos.link(sector.index1=df1$region[i], point1=c(df1$sum1[i], df1$sum1[i] + abs(m[i, j])),
          sector.index2=df1$region[j], point2=c(df1$sum2[j], df1$sum2[j] + abs(m[i, j])),
          col = df1$lcol[i])
    df1$sum1[i] = df1$sum1[i] + abs(m[i, j])
    df1$sum2[j] = df1$sum2[j] + abs(m[i, j])
}

並且,正如您所看到的,我獲得了這個非常酷的圖表 ,但其中的鏈接並不一定代表我的矩陣。 例如,您可以看到沒有從Pacifico和Mediterraneo或從Atlantico到Mediterraneo的流量,但在矩陣中,我為那些與實際繪制的段相似的段提供了一些值。 它可能與注意代碼在創建繪圖區域后顯示:(注意:1點不在扇區'Pacífico'中的繪圖區域,軌道'1')。 但我不知道如何處理它。 我將非常感謝任何反饋和意見

這條線

df2 <- subset(df2, m>quantile(m,0.65))

確保僅繪制最大流量。 你可能不需要這個,因為你只有四個區域,聽起來你想看到所有的流程。

另外,我還沒有在migest包中更新演示腳本的CRAN版本。 您最好在github上使用該版本, https://github.com/gjabel/migest/tree/master/demo ,或者......現在使用chordDiagram函數可以更輕松地使用這些圖:

library("circlize")
m <- read.table("region_reciente.txt", skip=2, stringsAsFactors=FALSE)
#data.frame for details on each region
df1 <- m[,1:3]
names(df1) <- c("order","rgb","region")
n <- nrow(df1)
df1 <- cbind(df1, matrix(as.numeric(unlist(strsplit(df1$rgb,","))),nrow=n, byrow=TRUE) )
names(df1)[ncol(df1)-2:0] <- c("r","g","b")
df1$rcol <- rgb(df1$r, df1$g, df1$b, max = 255)

#flow matrix
m <- m[,-(1:3)]
m <- as.matrix(m)
dimnames(m) <- list(orig=df1$region, dest=df1$region)
chordDiagram(m, directional = TRUE, grid.col=df1$rcol)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM