打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ggplot2 - 更改分面的相对宽度

facet_plot在关联数据上,可谓非常方便,当然有个槽点,就是它利用了facet_grid,从而也就没办法设置不同panel之间的宽度比例了,所以你画的图,所有的panel都是一样大。这篇文章就来突破一下这个限制。

library(ggplot2)
library(ggstance)
library(ggtree)
library(reshape2)

set.seed(123)
tree <- rtree(30)

p <- ggtree(tree, branch.length = 'none') + 
    geom_tiplab()

a <- runif(30, 0,1)
b <- 1 - a
df <- data.frame(tree$tip.label, a, b)
df <- melt(df, id = 'tree.tip.label')

p2 <- facet_plot(p + xlim_tree(8), panel = 'bar', data = df, geom = geom_barh, 
                 mapping = aes(x = value, fill = as.factor(variable)), 
                 width = 0.8, stat='identity')

假设我们画了p2这个图,在ggtree新版中,我又加入了一个函数facet_widths用于设置不同panel的相对宽度,比如:

facet_widths(p2, widths = c(1, 2))

当然参数也允许用named vector,你可以指定某个panel,比如:

facet_widths(p2, c(Tree = .5))

最主要的是它还能用于其它的ggplot对象:

p <- ggplot(iris, aes(Sepal.Width, Petal.Length)) + 
  geom_point() + facet_grid(.~Species)
facet_widths(p, c(setosa = .5))

当然这个由于不是ggplot2所支持,得借助于grid来实现,继而输出的就不是原来的ggplot对象了,所以你最好在最后一步才用它。不像之前介绍的《facet_plot更改panel label》,则是在原来的ggplot对象中稍做修改而来。

比如你要联用facet_widthsfacet_labeller话,只能先facet_labellerfacet_widths而反之则不行。

facet_labeller(p2, c(Tree = 'phylogeny')) %>% facet_widths(c(Tree = .4))


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
技术贴 | R语言:ggplot绘图的Y轴截断和拼接
用R来拼图和排版,告别AI和PS(二):调节宽度和高度
ggplot2
ggplot2--facet各分面的坐标轴自定义设置
ggplot2笔记7:定位(分面和坐标系)
mathart:一个富有逼格的R包
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服