我正在使用ggplot2
和animation
包制作动画情节。动画的每一帧都包含一个包含两位信息的地图,我想将其用作标题/标签。
在我看来,有两种方法可以做到这一点。
geom_text
将“标题”添加为绘图上的文本注释。 第一种方法并不理想,因为我需要为每个帧使用相同的绘图限制,并且我从以lat / long测量的地图范围中获得这些。确定标签所需的额外高度会导致丑陋的单位混合。因此,添加第二个标题在语义上对我来说更明智,但在使用annotation_custom
之后,我似乎无法弄明白。
这是我所追求的模型,展示了两个“标题”,每个标题都有不同的对齐方式,以确保它们在重复的帧中保持不变。我打开了情节边框来帮助想象这个位置。在最终的情节中,这将被删除。
感谢您的帮助!
修改
感谢Baptiste的签名发布。我不得不使用稍微不同的参数来(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)
结果如下:
答案 0 :(得分:10)
试试这个
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)
答案 1 :(得分:1)
基于grid
包
require(ggplot2)
require(grid)
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))
gg
grid.text("Right", x = unit(0.95, "npc"), y = unit(0.96, "npc"))
答案 2 :(得分:0)
替代annotate
并关闭剪辑(不推荐)
p = qplot(1,1) + annotate("text", label="left",
x=-Inf, y=Inf, vjust=-1, hjust=0)
g = ggplotGrob(p)
g$layout$clip[g$layout$name == "panel"] = "off"
grid.draw(g)