LCM*_*LCM 12 r data-visualization ggplot2 ggtree ggridges
是否可以将一个joyplot作为面板添加到包含ggtree的图中,如这些示例所示?这里有joyplots的例子.
我意识到我可以按照与树尖标签相同的顺序手动设置joyplot的物种标签,但我正在寻找一种自动解决方案.我想自动将joyplot行与树的提示相关联,类似于boxplot数据与tip标签的关联方式.
我认为Yuchuang Yu在上面链接的例子提供了合适的数据:
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)
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个封装图来代替箱线图?
以下是上面演示数据集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()
Run Code Online (Sandbox Code Playgroud)
我是ggplot2,ggtree和ggjoy的新手,所以我完全不知道如何开始这样做.
eip*_*i10 13
注意:截至2017-09-14,该ggjoy软件包已被弃用.相反,请使用该ggridges包.要使用下面的代码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)
Run Code Online (Sandbox Code Playgroud)
如果您是ggplot2的新手,Data Science with R(ggplot2作者的开源书)的可视化章节应该有助于学习基础知识.
ggjoy并ggtree扩展ggplot2的功能.当这样的扩展做得很好时,"显而易见"的事情(就通常的ggplot"图形语法"而言)经常有效,因为扩展包的编写方式试图忠实于底层的ggplot2方法.
在这里,我首先想到的是刚刚替补geom_joy的geom_boxplot,这竟然把工作做好.每种方法geom都只是一种可视化数据的不同方式,在本例中是方框图与密度图.但是该图的所有其他"结构"保持不变,因此您可以更改geoms并获得遵循相同轴排序,颜色映射等的新图.一旦您获得了一些经验,这将更有意义. 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)
Run Code Online (Sandbox Code Playgroud)
更新:这是对您的评论的回应,询问如何在两个构面板中获得相同的自定义颜色.这是使用您的问题中的示例数据执行此操作的代码:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |