2017-07-29 98 views
10

是否可以将joyplot作为面板添加到包含ggtree的图中,如these examples所示?喜悦图的例子是hereggjoy facet with ggtree

我意识到我可以手动将joyplot的物种标签按照树尖标签的顺序放置,但我正在寻找自动解决方案。我想自动将joyplot行与树的提示相关联,类似于boxplot数据如何与提示标签相关联。

我认为Guangchuang瑜在上面的链接示例提供合适的数据:

require(ggtree) 
require(ggstance) 

# generate tree 
tr <- rtree(30) 

# create simple ggtree object with tip labels 
p <- ggtree(tr) + geom_tiplab(offset = 0.02) 

# Generate categorical data for each "species" 
d1 <- data.frame(id=tr$tip.label, location=sample(c("GZ", "HK", "CZ"), 30, replace=TRUE)) 

#Plot the categorical data as colored points on the tree tips 
p1 <- p %<+% d1 + geom_tippoint(aes(color=location)) 

# Generate distribution of points for each species 
d4 = data.frame(id=rep(tr$tip.label, each=20), 
      val=as.vector(sapply(1:30, function(i) 
          rnorm(20, mean=i))) 
      )    

# Create panel with boxplot of the d4 data 
p4 <- facet_plot(p1, panel="Boxplot", data=d4, geom_boxploth, 
     mapping = aes(x=val, group=label, color=location))   
plot(p4) 

这将产生下面的情节: demo ggtree plot

是否有可能到位箱线图的创建joyplot?

这里是演示数据集D4的上方快速joyplot代码:

require(ggjoy) 

ggplot(d4, aes(x = val, y = id)) + 
geom_joy(scale = 2, rel_min_height=0.03) + 
scale_y_discrete(expand = c(0.01, 0)) + theme_joy() 

结果是: demo joyplot

我是新来GGPLOT2,ggtree和ggjoy所以我完全是在如何甚至开始这样做的损失。

+0

你能提供一些合适的样本数据一起工作呢?粘贴到你的问题'dput(data_sample)' – eipi10

+0

@ eipi10的输出我已经添加了一些由ggtree包的创建者编写的演示代码。我不知道'dput(data_sample)'指的是什么' – LCM

回答

11

注意:截至2017年9月14日,ggjoy package has been deprecated。相反,请使用ggridges package。对于下面的代码与ggridges一起使用,请使用geom_density_ridges而不是geom_joy


看起来你可以geom_joyfacet_plot只需更换geom_boxplot

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey50", lwd=0.3) 

enter image description here

如果你是新的作者,以GGPLOT2,the visualization chapter of Data Science with R(一个开源的书ggplot2)应该有助于学习基础知识。

ggjoyggtree扩展了ggplot2的功能。当这样的扩展很好地完成时,“显而易见的”事情(就通常的ggplot“图形语法”而言)经常起作用,因为扩展包是以一种试图忠实于基本ggplot2方法的方式编写的。

在这里,我的第一个想法是用geom_joy代替geom_boxplot,结果证明完成了这项工作。每个geom只是将数据可视化的一种不同方式,在这种情况下,框图对比密度图。但是情节的所有其他“结构”都保持不变,所以你可以改变几何,并得到一个遵循相同的轴顺序,颜色映射等的新的情节。一旦你获得了一些经验,这将更有意义。 ggplot2图形文法。

下面是左手情节略有不同的标记方法:

p1 = ggtree(tr) %<+% d1 + 
    geom_tippoint(aes(color=location), size=6) + 
    geom_tiplab(offset=-0.01, hjust=0.5, colour="white", size=3.2, fontface="bold") 

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey40", lwd=0.3) 

enter image description here

UPDATE:这是在响应您的意见,询问如何获得相同的自定义颜色都刻面板。这里的代码,这样做与你的问题示例数据:

p1 = ggtree(tr) %<+% d1 + 
    geom_tippoint(aes(color=location), size=5) + 
    geom_tiplab(offset=-0.01, hjust=0.5, colour="white", size=3, fontface="bold") + 
    scale_colour_manual(values = c("grey", "red3", "blue")) + 
    scale_fill_manual(values = c("grey", "red3", "blue")) 

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey40", lwd=0.3) 

enter image description here

+0

非常感谢!我该如何设置一个自定义色阶并使其延续到joyplot?我有一个包含geom_tippoint()的二进制类的树;我可以使用'+ scale_colour_manual(values = c(“no”=“gray”,“yes”=“red3”))来选择颜色,但我无法弄清楚如何使颜色方案延伸到joyplot 。如果我使用scale_colour_manual(),则会出现“颜色比例”错误,并为'颜色'添加另一个比例尺,它将替换现有比例尺。“但joyplot保持默认颜色。 – LCM

+1

将'scale_fill_manual(values = c(“no”=“gray”,“yes”=“red3”))'添加到初始绘图,并在您执行'facet_plot'时执行。 'geom_joy'使用'fill'美学,所以你需要用'scale_fill_manual'设置填充颜色,而不是'scale_colour_manual'。只需使用'colour'和'fill'的相同颜色,并在绘制小平面时匹配。 “尺度”(颜色比例,形状比例,轴线范围和中断等)是ggplot2中体现的“图形语法”的另一个方面。 – eipi10

+0

当我这样做时,我得到喜欢的颜色(灰色和红色)的喜悦,但不是树尖。我现在没有一个可重复的例子,但是可以从语法中知道:'baseplot < - p%<+%d1 + geom_tippoint(aes(color = factor(HybridizesLax),cex = 1))+ scale_fill_manual (values = c(“no”=“gray”,“yes”=“red3”))+ theme(legend.position =“left”)'和'tree_joyplot < - facet_plot(baseplot,panel =“年平均气温C)“,data = amt_data,geom_joy, mapping = aes(x = amt,group = label,fill = factor(HybridizesLax)),color =”grey50“,lwd = 0.3)' – LCM