【问题标题】:best way to convert dendrogram to ggplot?将树状图转换为 ggplot 的最佳方法?
【发布时间】:2021-07-16 20:49:08
【问题描述】:

我已经使用 dendextend 包的 set("by_labels_branches_col") 函数建立了一个树状图并根据它们的“纯度”(它们是否只包括因子变量中具有特定值的主题)为其分支着色。现在,我想将此树状图转换为 ggplot2 对象以进行进一步定制。我已经能够使用 as.ggdend 函数(也来自 dendextend 包)来做到这一点。这是我遇到2个问题的时候 我需要一些帮助:

1-使用 as.ggdend 后,生成的对象“丢失”指示树状图高度的垂直轴...如何在不丢失轴的情况下进行此转换?

2.-我还尝试通过使用 dendextend 包的 colour_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)

提前感谢任何可能的答案

【问题讨论】:

  • 如果df 派生自mtcars 数据集(根据一些变量名判断),您能否在代码示例中添加您是如何从mtcars 派生df 的?这将使代码可重现并且更容易解决问题。如果它不是从标准数据集派生的,您能否包含一些允许我们重现问题的虚拟数据?
  • Teunbrad:感谢您的评论。我没有意识到我省略了第一行代码。现在改正了。

标签: r ggplot2 dendrogram dendextend


【解决方案1】:

最后,我找到了第一个已发布问题的解决方案)。它远非优雅,可能有更好的方法来做到这一点。不过,我把它贴在这里以防万一有人觉得它有用。

解决方案跳过as.ggdend的使用,直接使用ggplot+theme来保证树状图轴显示。因为这会自动加粗所有绘图线,所以在第 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)

【讨论】:

  • IIRC 使用 ggplot2(de2) 实际上在 de2 上运行 as.ggdend。似乎您为 ggplot2 对象找到了一个很好的设置。感谢您的更新。
  • 你可能是对的,我只是不知道......非常感谢你让我知道:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多