【发布时间】:2019-09-07 11:47:33
【问题描述】:
我有几个使用 ggplot 中的 cowplot 函数绘制的图。 我想添加一个“标题”,即牛图顶部的盒装文本。 它们应该是五个盒子,每个盒子的长度都遵循一个精确的时间范围,仅显示在底部图的 x 轴上。
我尝试在牛图上使用注释,但我什么也看不到。 我已经尝试为每个注释使用随机坐标,只是为了尝试。 比,我不知道如何框文本。
【问题讨论】:
标签: r ggplot2 annotate cowplot
我有几个使用 ggplot 中的 cowplot 函数绘制的图。 我想添加一个“标题”,即牛图顶部的盒装文本。 它们应该是五个盒子,每个盒子的长度都遵循一个精确的时间范围,仅显示在底部图的 x 轴上。
我尝试在牛图上使用注释,但我什么也看不到。 我已经尝试为每个注释使用随机坐标,只是为了尝试。 比,我不知道如何框文本。
【问题讨论】:
标签: r ggplot2 annotate cowplot
您无需使用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 中的其余部分结合起来。
【讨论】:
show.legend 参数来执行此操作,例如 geom_rect(..., show.legend = FALSE)。 geom_text 也一样。
rects 数据框中的另一列,该列具有标签的 x 坐标。然后用它来绘制标签。