在 R 中保存用 dendextend 修改的树状图

Saving dendrograms modified with dendextend in R

我想旋转树状图中几个组的顺序,并设法用 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)
  

我想要的剧情是这样的: 旋转树状图



我得到的情节是这样的: 未旋转的树状图

几点:

  1. 我认为没有必要使用 dendroextras 包。 dendextend 软件包包含您需要的所有功能(具有更一致的 API)。
  2. 不需要 ggplot2ggsave,因为您创建的图不是 ggplot2 图,而是 R 基础图形图。因此,您可以使用 png("file_loc.png"); 之类的东西保存您的情节。 plotting_functions(); 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()