我建立了一个树状图,并根据它们的";纯度";(它们是否只包括因子变量中具有特定值的受试者(。现在,我想将这个树状图转换为ggplot2对象以进行进一步的自定义。我已经能够通过函数as.ggdend(同样来自dendrend包(来实现这一点。当我遇到两个问题时为此我需要一些帮助:
1-在使用as.ggdend之后;损失";纵轴表示树状图的高度。。。我怎样才能在不丢失轴的情况下进行转换?
2.-我还试图通过使用dendrend包的colored_bars函数添加一个彩色条来丰富我的树状图。但是,我不知道如何保存生成的对象以将其转换为ggplot对象。
在这里,我提供了一个mtcars数据集的代码示例
df=mtcars
ds=dist(df, "euclidean")
hc<-hclust(ds,method= "average")
de=as.dendrogram(hc)
library(dendextend)
code=rownames(df[df$cyl==4,])#factor for coloring
de2<-de%>%set("by_labels_branches_col", value = c(code))%>% set("labels", "")%>%as.dendrogram(de)#coloring branches
#to add the colored bar
colores<-c("red","black", "blue") [as.factor(df$cyl)]
plot(de2)
colored_bars(colors=colores,dend=de2, y_shift=-2, rowLabels="" )
#transform to ggplot
de3=as.ggdend(de2)
提前感谢任何可能的答案
最后,我找到了第一个问题的解决方案(。它远非优雅,也许还有更好的方法可以做到这一点。不过,我把它贴在这里,以防有人发现它有用。
该解决方案跳过了对as.ggdend的使用,直接使用ggplot+主题来确保树状图轴的显示。因为这会自动加厚所有打印线,所以在第2/3步中会更正线尺寸。
step1=ggplot(de2)+
theme(axis.line.y = element_line(color="black"),
axis.text.y = element_text(color="black"),
axis.ticks.y = element_line(color="black"))+
scale_y_continuous(expand = expansion(add = c(0,0)))
step2=ggplot_build(step1)
step2$data[[1]]$size=0.3
step3= ggplot_gtable(step2)
step4=ggplotify::as.ggplot(step3)