首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带ggtree的ggjoy小面

带ggtree的ggjoy小面
EN

Stack Overflow用户
提问于 2017-07-29 01:05:49
回答 1查看 3.2K关注 0票数 13

是否可以在包含ggtree的绘图中添加一个作为面板的欢乐图,如这些例子所示?游戏情节的例子是这里

我意识到,我可以手动将欢乐地的物种标签放在与树梢标签相同的顺序,但我正在寻找一个自动的解决方案。我想自动将操纵图行与树梢相关联,类似于盒图数据与提示标签的关联方式。

我认为广创于在上述链接上的例子提供了适当的数据:

代码语言:javascript
复制
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的快速操作图的代码:

代码语言:javascript
复制
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都很陌生,所以我完全不知道该如何开始这么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 06:06:29

注:截至2017-09-14年度,一揽子方案已被否决.相反,使用套餐。要让下面的代码使用ggridges,请使用geom_density_ridges而不是geom_joy

看起来您只需在geom_boxplot中用geom_joy替换facet_plot

代码语言:javascript
复制
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作者的一本开源书)应该有助于学习基础知识。

ggjoyggtree扩展了ggplot2的功能。当这样的扩展做得很好时,要做的“显而易见”的事情(按照通常的ggplot2“图形语法”)通常是有效的,因为扩展包的编写方式试图忠实于底层的ggplot2方法。

在这里,我的第一个想法是用geom_joy来代替geom_boxplot,它最终完成了任务。每个geom只是一种不同的数据可视化方式,在本例中是方框图和密度图。但是,图中的所有其他“结构”都保持不变,所以您只需改变地理位置,得到一个遵循相同轴序、颜色映射等的新绘图。一旦您对图形的ggplot2语法有了一些经验,这将更有意义。

这是一种稍微不同的左边图的标记方法:

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

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

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

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

https://stackoverflow.com/questions/45384281

复制
相关文章

相似问题

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