7

現在、樹状図をプロットするためにggplot2とを使用しています。ggdendroしかし今、ラベルとともに葉の下に離散変数をプロットする必要があります。

たとえば、ある出版物 (Zhang et al., 2006) で、次のような系統樹を見ました (葉のラベルの下にあるカラー バーに注目してください)。

デンドログラムの例

すでにビニングしたデータを使用して、ggdendro + ggplot2 で同じことを行うことに興味があります。これは可能ですか?

4

1 に答える 1

12

まず、カラーバーのデータフレームを作成する必要があります。たとえば、データを使用しUSArrestsました-関数でクラスタリングを作成しhclust()、オブジェクトを保存しました。次に、このクラスタリングオブジェクトを使用して、関数cutree()を使用してクラスターに分割し、列クラスターとして保存しました。列statesにはクラスタリング オブジェクトのラベルが含まれてhcおり、このオブジェクトのレベルは の出力と同じ順序になっていますhc

library(ggdendro)
library(ggplot2)
hc <- hclust(dist(USArrests), "ave")
df2<-data.frame(cluster=cutree(hc,6),states=factor(hc$labels,levels=hc$labels[hc$order]))
head(df2)
           cluster     states
Alabama          1    Alabama
Alaska           1     Alaska
Arizona          1    Arizona
Arkansas         2   Arkansas
California       1 California
Colorado         2   Colorado

オブジェクトとして 2 つのプロットを保存します。デンドログラムとカラーバーは、x 値と色数としてgeom_tile()使用して作成されます。すべての軸を削除するためにフォーマットが行われます。statescluster

p1<-ggdendrogram(hc, rotate=FALSE)


p2<-ggplot(df2,aes(states,y=1,fill=factor(cluster)))+geom_tile()+
  scale_y_continuous(expand=c(0,0))+
  theme(axis.title=element_blank(),
        axis.ticks=element_blank(),
        axis.text=element_blank(),
        legend.position="none")

これで、この質問に対する@Baptiste の回答を使用して、両方のプロットを揃えることができます。

library(gridExtra)

gp1<-ggplotGrob(p1)
gp2<-ggplotGrob(p2)  

maxWidth = grid::unit.pmax(gp1$widths[2:5], gp2$widths[2:5])
gp1$widths[2:5] <- as.list(maxWidth)
gp2$widths[2:5] <- as.list(maxWidth)

grid.arrange(gp1, gp2, ncol=1,heights=c(4/5,1/5))

ここに画像の説明を入力

于 2013-11-12T11:01:30.473 に答える