【问题标题】:How to add text bar at the top of a cowplot?如何在牛图顶部添加文本栏?
【发布时间】:2019-09-07 11:47:33
【问题描述】:

我有几个使用 ggplot 中的 cowplot 函数绘制的图。 我想添加一个“标题”,即牛图顶部的盒装文本。 它们应该是五个盒子,每个盒子的长度都遵循一个精确的时间范围,仅显示在底部图的 x 轴上。

我尝试在牛图上使用注释,但我什么也看不到。 我已经尝试为每个注释使用随机坐标,只是为了尝试。 比,我不知道如何框文本。

我分享两张照片: 1)我的一个没有“标题”的牛图 2)示例情节的图片,类似于我希望的情节

【问题讨论】:

    标签: r ggplot2 annotate cowplot


    【解决方案1】:

    您无需使用cowplot 添加此“标题面板”。您可以使用包grid 制作tableGrob,然后通过cowplot::ggdraw() 将其与另一个图表结合起来。但这是不必要的。

    ggplot 本身中自定义这样的注释,然后在最后组合所有内容要容易得多。

    首先我们为标题横幅制作一个数据框:

    library(ggplot2)
    rects <- data.frame(x=c(0,2,4), xmax=c(2,4,5), y=c(42, 42, 42), z=c("Flowering", "Fruiting", "Ripening"))
    

    然后我们可以注释一些情节。请注意,我正在设置 x 和 y 轴的限制以匹配 rects 数据框(或相反)。

    ggplot(iris, aes(x=Sepal.Width)) + 
      geom_histogram(color="white") + 
      scale_x_continuous(limits=c(0, 5)) + 
      scale_y_continuous(limits=c(0, 50)) +
    # add tiles
      geom_rect(data=rects, aes(xmin=x, ymin=40, ymax=45, xmax=xmax, fill=z), inherit.aes = FALSE) +
    # add labels
      geom_text(data=rects, aes(x=x, y=y, label=z), hjust=0, inherit.aes = FALSE)
    

    应该得到这样的东西:

    从这里可以轻松更改此横幅,将不同的颜色映射到填充美学等等。最后,将此预注释的图与cowplot 中的其余部分结合起来。

    【讨论】:

    • 那么,你说我可以在cowplot的第一个图的顶部添加注释?好的,我怎样才能调整 x 轴间距?例如,在我的第一个情节中,我没有 x,只有 3 分!
    • 不确定我是否理解。您的 x 轴似乎是连续的?
    • 您应该可以使用 show.legend 参数来执行此操作,例如 geom_rect(..., show.legend = FALSE)。 geom_text 也一样。
    • 标签的 x 轴位置可以独立于框的坐标。您只需要 rects 数据框中的另一列,该列具有标签的 x 坐标。然后用它来绘制标签。
    • 好的。我几乎已经完成了一切。最后一个:我怎样才能把这个文本和矩形放在绘图网格之外的顶部?我想避免在图例下出现此文本。
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多