r - 在面板外添加ggplot注释?还是两个头衔?

标签 r ggplot2

我正在使用ggplot2animation包制作动画图。动画的每一帧都包含一个 map ,其中包含我想用作标题/标签的两位信息。

在我看来有两种方法可以做到这一点。

  1. 调整绘图边距,使标题边距消失,然后使用 geom_text 添加“标题”作为绘图上的文本注释。
  2. 添加第二个标题。 (我尝试用空格填充单个标题来模拟两个标题,但由于字距调整,这会因重复绘图而崩溃。)

第一种方法并不理想,因为我需要对每个帧使用相同的绘图限制,并且我从以纬度/经度测量的 map 范围中获取这些限制。确定标签所需的额外高度会导致单位的困惑。因此,添加第二个标题对我来说在语义上似乎更明智,但在使用 annotation_custom 后,我似乎无法弄清楚。

这是我所追求的模型,显示了两个“标题”,并且每个标题都有单独的对齐方式,以确保它们在重复的帧中保持在适当的位置。我打开了绘图边框以帮助可视化该位置。在最终的图中,这将被删除。

Mock-up of ggplot with two titles

感谢您的帮助!

编辑

感谢巴蒂斯特的路标。我必须使用稍微不同的参数来(a)获得正确的定位和(b)为两个标题使用相同的字体。这是一个例子:

require(gtable)
require(ggplot2)

## Create the basic plot
df <- data.frame(x=1:10, y=1:10)
gg <- ggplot(df, aes(x,y)) + geom_point() + labs(title="Left") +
    theme(plot.title=element_text(hjust=0))

## Get the title style from the original plot
g <- ggplotGrob(gg)
title_style <- g$grobs[[8]]$gp

## Add the second title and plot
g2 <- gtable_add_grob(g, textGrob("Right", x=1, hjust=1, gp=title_style),
                      t=2, l=4, b=2, r=4, name="right-title")
grid.draw(g2)

结果如下:

ggplot figure with two titles

最佳答案

试试这个

p = qplot(1,1) 
g = ggplotGrob(p)

require(gtable)
g = gtable_add_grob(g, grobTree(textGrob("left", x=0, hjust=0), 
                                textGrob("right", x=1, hjust=1)), 
                    t=1, l=4)

grid.draw(g)

关于r - 在面板外添加ggplot注释?还是两个头衔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997715/

相关文章:

r - 使用 NA 按类别将平均列添加到数据框

R:来自具有 2 个可能条件 (+/-) 的元素向量的所有可能组合

r - 如何在列表中循环并访问名称和属性?

ggplot2 中的反向叠加 alpha 值

r - 使用 ggplot 的 geom_boxplot 绘制 POSIX 日期的预先计算的统计数据

r - 如何格式化ggplot2图例的数值?

r - 使用 R,将可变行数中的文本组合成单个文本元素

r - 在 R 中加载多个 RDS 文件作为自定义函数中的多个对象

r - ggplot2:数字 x 轴上的自定义分类标签

r - 如何防止ggplot2中的轴相交