首页 > 解决方案 > 在R中保存用dendextend修改的树状图

问题描述

我想在树状图中旋转几个组的顺序,并设法用dendextend 做到这一点。但是,当我尝试使用 ggsave 保存绘图时,我最终得到了未旋转的原始树状图。有没有办法用ggplot2保存旋转的树状图?我的代码如下:

library(dendroextras)        
library(ggplot2)        
library(dendextend)        
d_copy_n <- colour_clusters(hc_test, k=6, groupLabels = as.roman)  
labels(d_copy_n)<-with(nl2[labels(d_copy_n)], Cell_type)   
d_copy_n <- set(d_copy_n, "labels_cex", 1)  
d_copy_n <- set(d_copy_n, "branches_lwd", 3)  
par(mar=c(0,2,0,0))  
d_copy_n %>%  
    rotate(121:86) %>%  
    plot()  
par(mar=c(0,2,0,0))      
ggsave("dendr_test.png", plot = plot(d_copy_n, cex.axis = 1, cex = 1), width = 21, height =7, units = "in", dpi = 300)
  

我想要的情节看起来像这样: 在此处输入图像描述旋转的树状图



我得到的情节是这样的: 在此处输入图像描述未旋转的树状图

标签: rggplot2dendrogramdendextendggsave

解决方案


几点:

  1. 我认为没有必要使用该dendroextras软件包。该dendextend软件包包括您需要的所有功能(具有更一致的 API)。
  2. 不需要ggplot2or ggsave,因为您创建的图不是 ggplot2 图,而是 R 基础 Graphics 图。因此,您可以使用诸如 png("file_loc.png"); 之类的东西来保存您的绘图。绘图函数();dev.off()
  3. 您需要将旋转保存到树状图中

像这样:

d_copy_n <- d_copy_n %>%  
    rotate(121:86)

现在这部分应该可以正常工作:

ggsave("dendr_test.png", plot = plot(d_copy_n, ...

这是一个简单的示例,用于您在不通过 ggplot2 和 dendroextras 的情况下询问的内容

library(dendextend)        
dend <- USArrests %>%
  dist() %>%
  hclust(method = "ave") %>%
  as.dendrogram()
d_copy_n <- color_branches(dend, k=6)  
d_copy_n <- set(d_copy_n, "labels_cex", 1)  
d_copy_n <- set(d_copy_n, "branches_lwd", 3)  
d_copy_n <- d_copy_n %>%  
  rotate(50:1)    

# or just use:
# d_copy_n <- color_branches(dend, k=6)  %>% 
#          set("labels_cex", 1)  %>% 
#          set("branches_lwd", 3)  %>% 
#          rotate(50:1)  

png("dend_plot.png")
d_copy_n %>%  
  plot()  
dev.off()

在此处输入图像描述


推荐阅读