一:概念与内容
和弦图:用于展示不同元素之间的关系和连接,由圆周/弧线、连接线/带状区域、节点、颜色、标签等元素组成。
“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"包官方的解释手册。这里有非常详细的和弦图参数设置。