【问题标题】:R: Customized dendrogram - different leave node color and type by labelR:自定义树状图 - 不同的离开节点颜色和标签类型
【发布时间】:2016-11-17 05:17:18
【问题描述】:

我使用 dendextend (vignette) 编写了以下 MWE:

library(cluster)
library(ggdendro)
library(dendextend)
d1 <- c(paste(rep("firstcelltype",7),1:7,sep="_"), paste(rep("secondcelltype", 3),1:3,sep="_"))
d1.df <- as.data.frame(t(combn(d1,2)))
set.seed(1)
d1.df$DIST <- sample(1:100, 45)
dmat <- with(d1.df, structure(DIST,
        Size = length(d1),
        Labels = d1,
        Diag = FALSE,
        Upper = FALSE,
        method = "user",
        class = "dist"))
c1 <- hclust(dmat, method="complete")
dend <- as.dendrogram(c1)
vals <- grep("second", d1, val=TRUE)
dend <- dend %>% set("leaves_pch", 19) %>%
        set("leaves_cex", 2) %>%
        set("by_labels_branches_col", value = vals, TF_values = c(2,Inf)) %>%
        set("by_labels_branches_lwd", value = vals, TF_values = c(4,2))
tiff("test.tiff")
mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(0, 0, 0, 5)) 
plot(dend, main = "MY TITLE", xlab="my.X", horiz=TRUE)
dev.off()

我在这里所做的只是创建一个距离矩阵,其中包含“d1”中我的标签的所有可能组合以及一些随机值作为距离。

我根据 hclust 结果制作了一个树状图,并将其保存在以下 TIFF 文件中:

如您所见,我已经能够更改“secondcelltype”的分支,但如果可以的话,我需要帮助来执行以下操作:

1 - 将“secondcelltype”离开节点更改为红色方块

2 - 将“secondcelltype”标签更改为红色(可能是粗体或斜体)

3 - 将所有字体更改为 Arial

我真的很感激这里的一些帮助!如果有比使用 dendextend 更好的方法,请告诉我。谢谢!

【问题讨论】:

    标签: r fonts colors dendrogram dendextend


    【解决方案1】:

    一些回应:

    1) 这里不需要 ggdendro

    2) 你需要使用:

        set("labels_colors", ifelse(ss_change, 2, 1)) %>%
        set("leaves_pch", ifelse(ss_change, 15, 19)) %>%
        set("leaves_col", ifelse(ss_change, 2, 1)) 
    

    3) 我看不到 Ariel 选项,但您可以通过 par(family = "sans") 使用“serif”、“sans”和“mono”等标准值

    这是一个符合您要求的代码:

    library(cluster)
    library(dendextend)
    d1 <- c(paste(rep("firstcelltype",7),1:7,sep="_"), paste(rep("secondcelltype", 3),1:3,sep="_"))
    d1.df <- as.data.frame(t(combn(d1,2)))
    set.seed(1)
    d1.df$DIST <- sample(1:100, 45)
    dmat <- with(d1.df, structure(DIST,
            Size = length(d1),
            Labels = d1,
            Diag = FALSE,
            Upper = FALSE,
            method = "user",
            class = "dist"))
    c1 <- hclust(dmat, method="complete")
    dend <- as.dendrogram(c1)
    vals <- grep("second", d1, val=TRUE)
    
    ss_change <- grepl("secondcelltype", labels(dend))
    
    dend <- dend %>% 
            set("labels_colors", ifelse(ss_change, 2, 1)) %>%
            set("leaves_pch", ifelse(ss_change, 15, 19)) %>%
            set("leaves_col", ifelse(ss_change, 2, 1)) 
    # str(unclass(dend))
    # plot(dend)
    
    dend <- dend %>% 
            set("leaves_cex", 2) %>%
            set("by_labels_branches_col", value = vals, TF_values = c(2,Inf)) %>%
            set("by_labels_branches_lwd", value = vals, TF_values = c(4,2))
    
    
    par(family = "sans")
    mar.default <- c(5,4,4,2) + 0.1
    par(mar = mar.default + c(0, 0, 0, 5)) 
    plot(dend, main = "MY TITLE", xlab="my.X", horiz=TRUE)
    

    【讨论】:

    • 非常感谢!我在stackoverflow.com/questions/14118033/… 中尝试了这种方法,但由于某种原因 c(a$nodePar, list(col='blue', lab.col='blue', pch=15)) 改变了 col 和 lab.col 但不是 pch。 ..
    • 如果您能够找到将字体更改为 Arial,请更新!谢谢!
    • @DaniCee 欢迎您。使用 dendrapply 手动解决这些问题可能非常乏味(因为它需要了解信息的存储方式)。这是我编写 dendextend 的部分动机。至于字体,我认为它本身可能值得一个 SO 问题(看看其他人是否有建议)。干杯,塔尔
    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2021-12-23
    • 2016-12-16
    • 2018-02-23
    • 2013-09-30
    • 2016-05-11
    相关资源
    最近更新 更多