5

次のように樹状図の葉に色を付けました

require(graphics)

dm <- hclust(dist(USArrests[1:5,]), "ave")

df<-data.frame("State"=c("Alabama","Alaska","Arizona","Arkansas","California"),   "Location"=c("South","North","West","South","West"))


color.sites<-function(dm){
    dend<-as.dendrogram(dm)
    plot(dend)

    cols <- attributes(dend)
    df$ColorGroups <- factor(df$Location)

    #Set colour pallette
    Location.Pal <- rainbow(nlevels(df$ColorGroups), s=0.9,v=0.9,start=0.1,end=0.9,alpha=1)

    colorleaves <- function (n) {
    # only apply to "leaves" in other words the labels
    if(is.leaf(n)) { 
        i <- which(df$State == attr(n,"label"))
        col.lab  <- Location.Pal[[unclass(df$ColorGroups[[i]])]]
        a <- attributes(n)
        attr(n, "nodePar") <- c(a$nodePar, list(lab.col = col.lab))
    }
    n
}

xx <- dendrapply(dend, colorleaves)

plot(xx, cex=3, cex.main=2, cex.lab=5, cex.axis=1, mar=c(3,3,3,3), main="Title")
}

color.sites(dm)

ここに画像の説明を入力

私がしたいこと: 1) 色を説明する凡例を追加します (つまり、オレンジ = 北) 2) 葉のラベルを大きく太字にします (cex.lab はその仕事をしていないようです) 3) はっきりと対照的なカラー パレットを作成します色 (虹、熱、色など) は、樹状図に多くの葉と色がある場合、すべてが混ざり合っているように見えます。

どんなアドバイスでも大歓迎です!

4

2 に答える 2

6

ggplot2グラフィックの使用方法と微調整方法をすでに知っている場合、別の解決策は@Andrieggdendroパッケージを使用することです。

library(ggplot2)
library(ggdendro)

dm <- hclust(dist(USArrests[1:5,]), "ave")

df <- data.frame(State = c("Alabama","Alaska","Arizona","Arkansas","California"),
                 Location = c("South","North","West","South","West"))


hcdata<- dendro_data(dm, type="rectangle")

hcdata$labels <- merge(x = hcdata$labels, y = df,  by.x = "label", by.y = "State")


ggplot() +
 geom_segment(data=segment(hcdata), aes(x=x, y=y, xend=xend, yend=yend)) +
 geom_text(data = label(hcdata), aes(x=x, y=y, label=label, colour = Location, hjust=0), size=3) +
 geom_point(data = label(hcdata), aes(x=x, y=y), size=3, shape = 21) +
 coord_flip() +
 scale_y_reverse(expand=c(0.2, 0)) +
 scale_colour_brewer(palette = "Dark2") + 
 theme_dendro() 

ここに画像の説明を入力してください

于 2012-08-15T11:48:02.440 に答える
4
  1. 使用するlegend()

    cols <- c("orange","forestgreen")
    legend("topright", legend = c("North","South"),
           fill = cols, border = cols, bty = "n")
    
  2. stats:::plot.dendrogram()ラベルが描画されtext()、グラフィカルパラメーターがその関数に渡されないため、ハッキングせずにできるとは思いません。関連するコードstats:::plot.dendrogram()は次のとおりです。

    if (!is.null(et <- attr(x, "edgetext"))) {
        my <- mean(hgt, yTop)
        if (horiz) 
            text(my, x0, et)
        else text(x0, my, et)
    }
    

    関数ソース全体をエディターにコピーし、それを編集して目的を実行し、それを独自の関数オブジェクトに割り当てて使用します。関数が見つからないために失敗した場合 (名前空間からエクスポートされていない可能性があります)、それがどの名前空間であるかを調べて、問題のある関数の前に関連する名前空間ns:::がどこにあるかを示します。ns

  3. カテゴリ パレットを選択するための 1 つのオプションとして、 RColorBrewerパッケージを試してください。

于 2012-08-15T11:29:45.950 に答える