2016-07-14 45 views
1

我已经写了使用dendextend(vignette)以下MWE:R:定制树状 - 不同的叶子节点颜色和类型的标签

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文件: test.tiff

正如你看到的,我已经能够改变“secondcelltype”的分支,但我需要帮助做到以下几点,如果它甚至有可能做到:

1 - 更改“secondcelltype”假节点到红场

2 - 更改“secondcelltype”标签为红色(也许粗体或斜体)

3 - 更改字体处处为Arial

我真的很感激这里一些帮助!如果有更好的方法来做到这一点比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)我不能看到林依晨的选择,但您可以使用标准值,例如“serif”,“sans”和“mono”使用par(family = "sans")

这是一个代码,它可以满足您的要求:

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) 

enter image description here

+0

太谢谢你了!我试图在http://stackoverflow.com/questions/14118033/horizo​​ntal-dendrogram-in-r-with-labels/14118735#14118735中的方法,但由于某种原因c($ nodePar,列表(col ='蓝色' ,lab.col ='blue',pch = 15))改变col和lab.col,但不是pch ... – DaniCee

+0

如果你能够找出更改字体为Arial请更新!谢谢! – DaniCee

+0

@DaniCee欢迎您。用dendrapply手动解决这些问题可能非常乏味(因为它需要对如何存储信息有所了解)。这是我编写dendextend的一部分动机。至于字体,我认为它本身可能值得一个SO问题(并且看看别人是否有建议)。干杯,塔尔 –