【R】circlize
2021年1月19日
1. はじめに
circlizeは、その名の通り、円形のグラフ、チャートを表示してくれるパッケージです。
2. インストール
CRANからインストールできます。
install.packages("circlize")
3. 使ってみる
通常のbarplotのようにデータを準備しtてプロットします。
library(circlize) par(mfrow = c(1, 2)) circos.initialize(fa = letters[1:4], xlim = c(0, 8)) circos.track(ylim = c(0, 4), panel.fun = function(x, y) { value = matrix(runif(10*4), ncol = 4) circos.barplot(value, 1:10 - 0.5, col = 2:5) }) circos.clear() circos.initialize(fa = letters[1:4], xlim = c(0, 10)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { value = runif(10) circos.barplot(value, 1:10 - 0.5, col = 1:10) }) circos.track(ylim = c(-1, 1), panel.fun = function(x, y) { value = runif(10, min = -1, max = 1) circos.barplot(value, 1:10 - 0.5, col = ifelse(value > 0, 2, 3)) }) circos.track(ylim = c(-1, 1), panel.fun = function(x, y) { value = runif(5, min = -1, max = 1) circos.barplot(value, 1:5 - 0.5, col = ifelse(value < 0, 1, 4)) })
boxplotもOKです。
circos.initialize(fa = letters[1:6], xlim = c(0, 5)) circos.track(ylim = c(0, 1), panel.fun = function(x, y) { value = replicate(runif(5), n = 5, simplify = FALSE) circos.boxplot(value, 1:5 - 0.5, col = 1:5) })
Multiple-group Chord diagram
mat1 = matrix(rnorm(25), nrow = 5) rownames(mat1) = paste0("A", 1:5) colnames(mat1) = paste0("B", 1:5) mat2 = matrix(rnorm(25), nrow = 5) rownames(mat2) = paste0("A", 1:5) colnames(mat2) = paste0("C", 1:5) mat3 = matrix(rnorm(25), nrow = 5) rownames(mat3) = paste0("B", 1:5) colnames(mat3) = paste0("C", 1:5) mat = matrix(0, nrow = 10, ncol = 10) rownames(mat) = c(rownames(mat2), rownames(mat3)) colnames(mat) = c(colnames(mat1), colnames(mat2)) mat[rownames(mat1), colnames(mat1)] = mat1 mat[rownames(mat2), colnames(mat2)] = mat2 mat[rownames(mat3), colnames(mat3)] = mat3 mat nm = unique(unlist(dimnames(mat))) group = structure(gsub("\\d", "", nm), names = nm) group grid.col = structure(c(rep(2, 5), rep(3, 5), rep(4, 5)), names = c(paste0("A", 1:5), paste0("B", 1:5), paste0("C", 1:5))) chordDiagram(mat, group = group, grid.col = grid.col)
4. さいごに
これ、使いこなすとなかなかクールな表現ができそうです。