是否可以在包含ggtree的绘图中添加一个作为面板的欢乐图,如这些例子所示?游戏情节的例子是这里。
我意识到,我可以手动将欢乐地的物种标签放在与树梢标签相同的顺序,但我正在寻找一个自动的解决方案。我想自动将操纵图行与树梢相关联,类似于盒图数据与提示标签的关联方式。
我认为广创于在上述链接上的例子提供了适当的数据:
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)这就产生了下面的情节:

是否有可能创建一个欢乐的情节来代替盒子情节?
下面是上面演示数据集d4的快速操作图的代码:
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()结果是:

我对ggplot2、ggtree和ggjoy都很陌生,所以我完全不知道该如何开始这么做。
发布于 2017-07-29 06:06:29
注:截至2017-09-14年度,一揽子方案已被否决.相反,使用套餐。要让下面的代码使用ggridges,请使用geom_density_ridges而不是geom_joy。
看起来您只需在geom_boxplot中用geom_joy替换facet_plot
facet_plot(p1, panel="Joy Plot", data=d4, geom_joy,
mapping = aes(x=val, group=label, fill=location), colour="grey50", lwd=0.3)

如果您是ggplot2新手,那么可视化章节 (ggplot2作者的一本开源书)应该有助于学习基础知识。
ggjoy和ggtree扩展了ggplot2的功能。当这样的扩展做得很好时,要做的“显而易见”的事情(按照通常的ggplot2“图形语法”)通常是有效的,因为扩展包的编写方式试图忠实于底层的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)

更新:--这是回应您的评论,询问如何在两个面面板中获得相同的自定义颜色。下面是对问题中的示例数据执行此操作的代码:
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)

https://stackoverflow.com/questions/45384281
复制相似问题