R 将一棵ggdend树与一棵geom_散点树相结合

R 将一棵ggdend树与一棵geom_散点树相结合,r,ggplot2,dendextend,ggdendro,scatterpie,R,Ggplot2,Dendextend,Ggdendro,Scatterpie,我有一个系统发育树: my.tree <- ape::read.tree(text = "((rat:0.06290316531,mouse:0.06094803666):0.05175420892,human:0.09883650566);") 我想使用ggplot2绘制my.dend,并添加到树叶饼图中 下面是描述每个叶的饼图的data.frame: set.seed(1) labels.df <- data.frame(label = c("human","mouse","r

我有一个系统发育树:

my.tree <- ape::read.tree(text = "((rat:0.06290316531,mouse:0.06094803666):0.05175420892,human:0.09883650566);")
我想使用
ggplot2
绘制
my.dend
,并添加到树叶饼图中

下面是描述每个叶的饼图的
data.frame

set.seed(1)
labels.df <- data.frame(label = c("human","mouse","rat"),t(apply(matrix(runif(9,0,1),3,3),1,function(x) x/sum(x))),check.names = F) %>%
  dplyr::left_join(my.dend$labels %>% dplyr::select(x,y,label))
其中:

如果在末尾添加
+coord\u flip()

ggplot(my.dend,labels=F,horiz=T)+guides(fill=F)+coord_flip()+annotate("text",size=4.5,hjust=0,x=my.dend$label$x,y=my.dend$label$y,label=my.dend$label$label)+labs(x="",y="")+theme_minimal()+
  theme(axis.text=element_blank(),axis.ticks=element_blank(),panel.grid=element_blank(),legend.position="none",legend.text=element_blank(),legend.background=element_blank(),legend.key=element_blank())+
  geom_scatterpie(aes(x=x,y=y+0.05),data=labels.df,color=NA,cols=as.character(1:3))+coord_equal()
馅饼不会变形,但树会翻转为垂直-根部朝下:


你知道如何让馅饼不变形,让树与左边的根保持水平吗?

看起来将更容易分别绘制系统发育图和
散馅饼,然后将它们组合起来:

数据:

my.tree%
dendextend::hang.树状图(hang=-1)%>%
dendextend::as.ggdend()
种子(1)
标签。df%
dplyr::left_join(my.dend$labels%>%dplyr::select(x,y,label))
图书馆(GG2)
图书馆(散乱)
绘图:

my.dend <- ggplot(my.dend,labels=F,horiz=T)+guides(fill=F)+coord_flip()+annotate("text",size=4.5,hjust=0,x=my.dend$label$x,y=my.dend$label$y,label=my.dend$label$label)+labs(x="",y="")+theme_minimal()+theme_void()
my.scatterpie <- ggplot()+geom_scatterpie(aes(x=y,y=x,r=0.1),data=labels.df,color=NA,cols=as.character(1:3))+coord_equal()+labs(x="",y="",fill="Cluster")+theme_minimal()+theme_void()

gridExtra::grid.arrange(grobs=list(my.dend,my.scatterpie),ncol=2,nrow=1)

my.dend令人印象深刻。您可能应该接受自己的答案:)
ggplot(my.dend,labels=F,horiz=T)+guides(fill=F)+coord_flip()+annotate("text",size=4.5,hjust=0,x=my.dend$label$x,y=my.dend$label$y,label=my.dend$label$label)+labs(x="",y="")+theme_minimal()+
  theme(axis.text=element_blank(),axis.ticks=element_blank(),panel.grid=element_blank(),legend.position="none",legend.text=element_blank(),legend.background=element_blank(),legend.key=element_blank())+
  geom_scatterpie(aes(x=x,y=y+0.05),data=labels.df,color=NA,cols=as.character(1:3))+coord_equal()
my.tree <- ape::read.tree(text = "((rat:0.06290316531,mouse:0.06094803666):0.05175420892,human:0.09883650566);")

library(dplyr)
my.dend <- phylogram::as.dendrogram.phylo(my.tree) %>%
  dendextend::hang.dendrogram() %>%
  dendextend::hang.dendrogram(hang = -1) %>%
  dendextend::as.ggdend()

set.seed(1)
labels.df <- data.frame(label = c("human","mouse","rat"),t(apply(matrix(runif(9,0,1),3,3),1,function(x) x/sum(x))),check.names = F) %>%
  dplyr::left_join(my.dend$labels %>% dplyr::select(x,y,label))

library(ggplot2)
library(scatterpie)
my.dend <- ggplot(my.dend,labels=F,horiz=T)+guides(fill=F)+coord_flip()+annotate("text",size=4.5,hjust=0,x=my.dend$label$x,y=my.dend$label$y,label=my.dend$label$label)+labs(x="",y="")+theme_minimal()+theme_void()
my.scatterpie <- ggplot()+geom_scatterpie(aes(x=y,y=x,r=0.1),data=labels.df,color=NA,cols=as.character(1:3))+coord_equal()+labs(x="",y="",fill="Cluster")+theme_minimal()+theme_void()

gridExtra::grid.arrange(grobs=list(my.dend,my.scatterpie),ncol=2,nrow=1)