R 和弦图

一:概念与内容

和弦图:用于展示不同元素之间的关系和连接,由圆周/弧线、连接线/带状区域、节点、颜色、标签等元素组成。

“circlize"包专用于生成圆形可视化的R语言包。该包的主要设计目标是在圆周上有效地可视化复杂的数据关系,例如基因组上的染色体、生态系统中的物种相互作用、时间序列数据等。

本文介绍SCI绘图中和弦图适用于刻画土地利用的变化(LUCC)以及土地利用变化矩阵(∆LUCC)

二、代码

  • 土地利用的变化(LUCC)
   # install.package("circlize")
   library(circlize)
   # install.package("viridis")
   library(viridis)
   
vegmat <- matrix(data=1:25,nrow = 5,ncol=5)
rownames(vegmat) <- c("NV_first","GR_first","FO_first","CR_first","SH_first")
colnames(vegmat) <- c("NV_second","GR_second","FO_second","CR_second","SH_second")

# NV_second GR_second FO_second CR_second SH_second
# NV_first         1         6        11        16        21
# GR_first         2         7        12        17        22
# FO_first         3         8        13        18        23
# CR_first         4         9        14        19        24
# SH_first         5        10        15        20        25

nm = unique(unlist(dimnames(vegmat)))
grid.col <- structure(rep( rev(viridis(5)),2),names=nm)
group <- structure(rep(c("2000","2005"),each=5),names=nm)

chordDiagram(vegmat,
             grid.col = grid.col,
             annotationTrack = c("grid"),
             annotationTrackHeight = c(0.08, 0.15),
             big.gap = 0,small.gap = 0,
             directional = 2,
             group = group,
             preAllocateTracks = list(
               track.height = mm_h(6),
               track.margin = c(mm_h(12), 0))
)
# 极坐标轴调整
circos.track(track.index = 2, panel.fun = function(x, y) {
  xlim = get.cell.meta.data("xlim")
  ylim = get.cell.meta.data("ylim")
  circos.axis(h = "top", labels.cex = 0.8,major.at = seq(0,100,20))
}, bg.border = NA)
# 高亮年份
highlight.sector(rownames(vegmat), track.index = 1, col =alpha( "#3CB371",0.7), text.vjust = 0.5,
                 text = "2000", cex = 1, text.col = "black", niceFacing = TRUE)
highlight.sector(colnames(vegmat), track.index = 1, col = alpha("#483D8B",0.7),text.vjust = 0.5,
                 text = "2005", cex =1, text.col = "black", niceFacing = TRUE)
# 标题
title(main="2000-2005",cex.main=1.5,family="serif")
# 图例
legend(fill = rev(viridis(5)),legend = c("Nonveg","Grass","Forest","Cropland","Shrud"),x=-1.53,y=-0.3,bty = "n",cex=1.5)
circos.clear()

  • 土地利用矩阵(∆LUCC)

   # install.package("circlize")
   library(circlize)
   # install.package("viridis")
   library(viridis)
   
vegmat <- matrix(data=1:25,nrow = 5,ncol=5)
for (i in 1:5) {
  vegmat[i,i] <- 0
}
rownames(vegmat) <- c("NV_first","GR_first","FO_first","CR_first","SH_first")
colnames(vegmat) <- c("NV_second","GR_second","FO_second","CR_second","SH_second")
# NV_second GR_second FO_second CR_second SH_second
# NV_first         0         6        11        16        21
# GR_first         2         0        12        17        22
# FO_first         3         8         0        18        23
# CR_first         4         9        14         0        24
# SH_first         5        10        15        20         0
​
nm = unique(unlist(dimnames(vegmat)))
grid.col <- structure(rep( rev(viridis(5)),2),names=nm)
group <- structure(rep(c("2000","2005"),each=5),names=nm)
​
chordDiagram(vegmat,
             grid.col = grid.col,
             annotationTrack = c("grid"),
             annotationTrackHeight = c(0.08, 0.15),
             big.gap = 0,small.gap = 0,
             directional = 2,
             group = group,
             preAllocateTracks = list(
               track.height = mm_h(6),
               track.margin = c(mm_h(12), 0))
)
# 极坐标轴调整
circos.track(track.index = 2, panel.fun = function(x, y) {
  xlim = get.cell.meta.data("xlim")
  ylim = get.cell.meta.data("ylim")
  circos.axis(h = "top", labels.cex = 0.8,major.at = seq(0,100,20))
}, bg.border = NA)
# 高亮年份
highlight.sector(rownames(vegmat), track.index = 1, col =alpha( "#3CB371",0.7), text.vjust = 0.5,
                 text = "2000", cex = 1, text.col = "black", niceFacing = TRUE)
highlight.sector(colnames(vegmat), track.index = 1, col = alpha("#483D8B",0.7),text.vjust = 0.5,
                 text = "2005", cex =1, text.col = "black", niceFacing = TRUE)
# 标题
title(main="2000-2005",cex.main=1.5,family="serif")
# 图例
legend(fill = rev(viridis(5)),legend = c("Nonveg","Grass","Forest","Cropland","Shrud"),x=-1.53,y=-0.3,bty = "n",cex=1.5)
circos.clear()

三、帮助

https://jokergoo.github.io/circlize_book/book/index.html (英文)此链接为“circlize"包官方的解释手册。这里有非常详细的和弦图参数设置。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值