首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2和ggplot2绘制节点叶子下的颜色条

ggplot2和ggplot2绘制节点叶子下的颜色条
EN

Stack Overflow用户
提问于 2013-11-12 10:30:19
回答 1查看 4.6K关注 0票数 7

目前,我正在使用ggplot2ggdendro绘制树状图。然而,现在我需要在叶子下绘制一个离散变量以及标签。

例如,在一份出版物(Zhang等人,2006年)中,我看到了这样的树状图(注意树叶标签下的第四色栏):

我感兴趣的是使用我已经绑定的数据,对binned + ggplot2进行同样的处理。这个是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 11:01:30

首先,您需要为颜色栏制作数据格式。例如,我使用USArrests创建的数据集群和hclust()函数,并保存了对象。然后利用该聚类对象,利用函数cutree()将其划分为簇,并将其保存为列簇。列states包含聚类对象hc的标签,该对象的级别与hc的输出排序相同。

代码语言:javascript
复制
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编号。格式化是用来删除所有轴的。

代码语言:javascript
复制
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")

现在,您可以使用@ this question的答案来对这两个情节。

代码语言:javascript
复制
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))

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19926697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档