gpt4 book ai didi

r - ggplot2 和 ggdendro - 在节点叶子下绘制颜色条

转载 作者:行者123 更新时间:2023-12-04 10:53:40 24 4
gpt4 key购买 nike

目前我正在使用 ggplot2ggdendro绘制树状图。但是现在我需要在叶子下绘制一个离散变量和标签。

例如,在一篇出版物(Zhang 等人,2006 年)中,我看到了一个这样的树状图(注意叶子标签下的颜色条):

Example dendrogram

我有兴趣使用 ggdendro + ggplot2 做同样的事情,使用我已经装箱的数据。这可能吗?

最佳答案

首先,您需要为颜色条制作数据框。例如我使用了数据 USArrests - 使用 hclust() 进行聚类函数并保存对象。然后使用此聚类对象使用函数 cutree() 将其划分为聚类并保存为列簇。栏目 states包含聚类对象的标签 hc并且此对象的级别与 hc 的输出中的顺序相同.

library(ggdendro)
library(ggplot2)
hc <- hclust(dist(USArrests), "ave")
df2<-data.frame(cluster=cutree(hc,6),states=factor(hc$labels,levels=hc$labels[hc$order]))
head(df2)
cluster states
Alabama 1 Alabama
Alaska 1 Alaska
Arizona 1 Arizona
Arkansas 2 Arkansas
California 1 California
Colorado 2 Colorado

现在将两个图保存为对象 - 用 geom_tile() 制作的树状图和颜色条使用 states作为 x 值和 cluster颜色的编号。完成格式化以删除所有轴。
p1<-ggdendrogram(hc, rotate=FALSE)


p2<-ggplot(df2,aes(states,y=1,fill=factor(cluster)))+geom_tile()+
scale_y_continuous(expand=c(0,0))+
theme(axis.title=element_blank(),
axis.ticks=element_blank(),
axis.text=element_blank(),
legend.position="none")

现在您可以使用@Baptiste 的回答 this question对齐两个图。
library(gridExtra)

gp1<-ggplotGrob(p1)
gp2<-ggplotGrob(p2)

maxWidth = grid::unit.pmax(gp1$widths[2:5], gp2$widths[2:5])
gp1$widths[2:5] <- as.list(maxWidth)
gp2$widths[2:5] <- as.list(maxWidth)

grid.arrange(gp1, gp2, ncol=1,heights=c(4/5,1/5))

enter image description here

关于r - ggplot2 和 ggdendro - 在节点叶子下绘制颜色条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19926697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com