1. ホーム
  2. R

Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版

2022-02-26 21:15:06
<パス

### データを読み込む際のよくあるエラー。
データ読み込み時に以下のような問題が発生する可能性がありますので、前回のブログを参考にしてください。

エラーレポートが発生する場合がある。

1. エラー in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") :
TRUE/FALSEが必要なところに値がない

データ変換距離の処理は行っていません。

2. hclust(dist(test)) でエラー : NA/NaN/Inf in foreign function call (arg 11).
おまけ 警告メッセージが表示されました。
dist(test) の場合:強制で導入されるNA

データが間違った方法で読み込まれました。詳細は各パラメータで、両方のデータ型があることを確認してください。
###プロットの描画を開始します。

> test<-read.table("C:/Users/admin/Desktop/test.txt")
> hc = hclust(dist(test))

plot(hc,hang=1,cex=0.5,labels = NULL)


> hcd = as.dendrogram(hc)
> plot(hcd)

# tweeking some parameters
op=par(bg="#DDE3CA")
plot(hc,col="#487AA1",col.main="#45ADA8",col.lab="#7C8071",
    col.axis="#F38630",lwd=3,lty=3,sub="",hang=-1,axes=FALSE)

# add axis
axis(side=2,at=seq(0,400,100),col="#F38630",labels=FALSE,
    lwd=2)
    
# add text in margin
mtext(seq(0,400,100),side=2,at=seq(0,400,100),line=1,
    col="#A38630",las=2)

plot(hcd, type = "triangle")


<イグ

### 代替クラスタリンググラフ

hcludeで生成されたオブジェクトを代替クラスタリンググラフに変換する

op = par(mfrow = c(2, 1))
> plot(cut(hcd, h = 75)$upper, main = "Upper tree of cut at h=75")
> plot(cut(hcd, h = 75)$lower[[2]], main = "Second branch of lower tree with cut at h=75") 


<イグ

if (is.leaf(n)) {

    a <- attributes(n)

    labCol <- labelColors[clusMember[which(names(clusMember) == a$label)]]

    attr(n, "nodePar") <- c(a$nodePar, lab.col = labCol)

}

n


<イグ

plot(as.phylo(hc), cex = 0.5, label.offset = 5) 


<イグ

ツリービューの拡大
また、非常に便利な機能として、ツリーの一部を選択することができます。例えば、樹形図上のある区画を研究したい場合、その区画の高さを75

plot(as.phylo(hc), type = "cladogram", cex = 0.9, label.offset = 1)

plot(as.phylo(hc), cex=1,type = "unrooted")


<イグ

よりカスタマイズされたグラフィックを得るためには、より多くのコードが必要です。非常に便利な関数 dendrapply は、dendrgoram のすべてのノードに関数を適用することができます。これは、タグに何らかの色を付けたい場合に非常に便利です。

<ブロッククオート

labelColors = c("#CDB380", "#036564", "#EB6841", "#EDC951 "))
clusMember = cutree(hc, 4)
colLab <- function(n) { <未定義

  • # fan 
    plot(as.phylo(hc), cex=1,label.offset = 2,type = "fan")
    
    plot(as.phylo(hc), type = "radial")
    
    
    
  • mypal=c("#556270", "#4ECDC4", "#1B676B", "#FF6B6B", "#C44D58")
    clus5=cutree(hc, 5)
    op=par(bg="#E8DDCB")
    plot(as.phylo(hc), type="fan", tip.color=mypal[clus5], label.offset=1, cex=log(mtcars$mpg, 10), col="red")
    
    
    
  • The Rpackagesparclprovides theColorDendrogramfunction that allows to add some color. For example, we can add color to theleaves
    
    The R package also provides theColorDendrogram function that allows us to give the clustering tree a color look. For example, we can add color to the leaf nodes
    
    # install.packages('sparcl')
    library(sparcl)
    # colors the leaves of a dendrogram
    y=cutree(hc, 3)
    ColorDendrogram(hc, y=y, labels=names(y), main="My Simulated Data", 
        branchlength=80)
    
    
    
    
  • library(ggdendro)
    library(plyr)
    # basic option
    ggdendro(hc)
    
    #another option
    ggdendrogram(hc, rotate = TRUE, size = 4, theme_dendro = FALSE, color ="tomato")
    
    # Triangular lines
    ddata <- dendro_data(as.dendrogram(hc), type = "triangle")
    ggplot(segment(ddata)) + geom_segment(aes(x = x, y = y, xend = xend, 
    yend = yend)) + ylim(-10, 150) + geom_text(data = label(ddata), aes(x = x, 
    y = y, label = label), angle = 90, lineheight = 0)
    
    Lastbut not least, there's one more resource available from Romain Francois'saddicted to Rgraph gallery which I find really interesting. the code inR for generating colored dendrograms, which you can download and modify ifwanted so, is availablehere
    
    Finally, you can go to Romain François' graph library to learn more~~.
    
    You can even modify his code
    
    The address is.
    
    http://gallery.r-enthusiasts.com/RGraphGallery.PHP?graph=79 (looks like you have to go over the wall)
    
    http://addictedtor.free.fr/packages/A2R/lastVersion/R/code.R
    
    # load code of A2R function
    source("http://addictedtor.free.fr/packages/A2R/lastVersion/R/code.R")
    # colored dendrogram
    op=par(bg="#EFEFEF")
    A2Rplot(hc, k=3, boxes=FALSE, col.up="gray50", col.down=c("#FF6B6B", 
        "#4ECDC4", "#556270"))
    
    
    
  • #another colored dendrogram
    op = par(bg = "gray15")
    cols = hsv(c(0.2, 0.57, 0.95), 1, 1, 0.8)
    A2Rplot(hc, k = 3, boxes = FALSE, col.up = "gray50", col.down = cols)
    
    
    
  • n
    
    
    
  • }

clusDendro = dendrapply(hcd, colLab)
plot(clusDendro, main = "Cool Dendrogram")

R パッケージ ape による、hclust オブジェクトを phylo オブジェクトに変換する as.phylo 関数を使用した、より魅力的なツリーを提供するための非常に優れたツールです。

plot(as.phylo(hc), cex = 0.5, label.offset = 5) 


<イグ

###4種類のクラスタリングツリーダイアグラム
plot.phylo 関数で使用できる 4 種類のクラスタリングツリープロットです。

plot(as.phylo(hc), type = "cladogram", cex = 0.9, label.offset = 1)


<イグ

plot(as.phylo(hc), cex=1,type = "unrooted")


<イグ

円形ツリー図

# fan 
plot(as.phylo(hc), cex=1,label.offset = 2,type = "fan")


<イグ

plot(as.phylo(hc), type = "radial")


<イグ

カスタマイズされたシステムの進化ツリー

apeパッケージは、ツリーの特徴を様々な方法でカスタマイズすることができ、多くのコントロールが可能です。例えば

<ブロッククオート

plot(as.phylo(hc), type = "fan", tip.color = hsv(runif(15, 0.65, 0.95), 1, 1, 0.7), edge.color = hsv(runif(10, 0.65, 0.75) , 1, 1, 0.7), edge.width = runif(20,0.5, 3), use.edge.length = TRUE, col = "gray80")

いくつかのパラメータを変更する

mypal=c("#556270", "#4ECDC4", "#1B676B", "#FF6B6B", "#C44D58")
clus5=cutree(hc, 5)
op=par(bg="#E8DDCB")
plot(as.phylo(hc), type="fan", tip.color=mypal[clus5], label.offset=1, cex=log(mtcars$mpg, 10), col="red")


<イグ

### 色付きリーフノード

The Rpackagesparclprovides theColorDendrogramfunction that allows to add some color. For example, we can add color to theleaves

The R package also provides theColorDendrogram function that allows us to give the clustering tree a color look. For example, we can add color to the leaf nodes

# install.packages('sparcl')
library(sparcl)
# colors the leaves of a dendrogram
y=cutree(hc, 3)
ColorDendrogram(hc, y=y, labels=names(y), main="My Simulated Data", 
    branchlength=80)



<イグ

Rパッケージのggplot2に樹形図を描く機能がない理由は私には不明です。しかし、ggdendroというパッケージがちゃんとした解決策を提供している。

library(ggdendro)
library(plyr)
# basic option
ggdendro(hc)


<イグ

#another option
ggdendrogram(hc, rotate = TRUE, size = 4, theme_dendro = FALSE, color ="tomato")


<イグ

# Triangular lines
ddata <- dendro_data(as.dendrogram(hc), type = "triangle")
ggplot(segment(ddata)) + geom_segment(aes(x = x, y = y, xend = xend, 
yend = yend)) + ylim(-10, 150) + geom_text(data = label(ddata), aes(x = x, 
y = y, label = label), angle = 90, lineheight = 0)


<イグ
カラーデンドログラム

Lastbut not least, there's one more resource available from Romain Francois'saddicted to Rgraph gallery which I find really interesting. the code inR for generating colored dendrograms, which you can download and modify ifwanted so, is availablehere

Finally, you can go to Romain François' graph library to learn more~~.

You can even modify his code

The address is.

http://gallery.r-enthusiasts.com/RGraphGallery.PHP?graph=79 (looks like you have to go over the wall)

http://addictedtor.free.fr/packages/A2R/lastVersion/R/code.R

# load code of A2R function
source("http://addictedtor.free.fr/packages/A2R/lastVersion/R/code.R")
# colored dendrogram
op=par(bg="#EFEFEF")
A2Rplot(hc, k=3, boxes=FALSE, col.up="gray50", col.down=c("#FF6B6B", 
    "#4ECDC4", "#556270"))


<イグ

パー(op)

#another colored dendrogram
op = par(bg = "gray15")
cols = hsv(c(0.2, 0.57, 0.95), 1, 1, 0.8)
A2Rplot(hc, k = 3, boxes = FALSE, col.up = "gray50", col.down = cols)


<イグ
QRコードからご覧いただけます。