【发布时间】:2013-07-22 06:02:05
【问题描述】:
我想将 ggplot 图形放置在地图上的指定位置。我选择了ggplot2 包,因为我比grid 更熟悉它。如果有人能帮我举一个小例子,如何使用grid 来完成这样的任务,我也将不胜感激。
这是一个简单的例子:
# create base plot
g <- ggplot(data.frame(x=c(-104,-94), y=c(33,38)), aes(x=x, y=y)) +
geom_blank()
# create theme
tm <- theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.line = element_blank(),
panel.background = element_blank(),
panel.grid = element_blank(),
panel.border = element_rect(color="grey", fill=NA),
title = element_text(size=5))
# create two plot which should be placed on the base plot
p1 <- ggplot(data.frame(x=c(-104,-94), y=c(33,38)), aes(x=x, y=y)) +
geom_point() + tm
p2 <- ggplot(data.frame(x=c(-100,-98), y=c(34,37)), aes(x=x, y=y)) +
geom_point() + tm
# place them using annotation_custom() function
a1 <- annotation_custom(grob = ggplotGrob(p1),
xmin = -104, xmax = -102,
ymin = 33, ymax = 35)
a2 <- annotation_custom(grob = ggplotGrob(p2),
xmin = -100, xmax = -98,
ymin = 35, ymax = 37)
# draw
g + a1
g + a2
g + a1 + a2
但在g + a1 + a2 的情况下,我获得了第一张图片,其中仅插入了第一张图p1。
怎么了?如何使用annotation_custom()绘制两个以上的图?
【问题讨论】:
-
一种解决方法是将 grobs 包装在
gTree、g1 = grobTree(ggplotGrob(p1)) ; g2 = grobTree(ggplotGrob(p2))中,并在annotation_custom中使用这些 grobs。不要问我为什么! -
请参阅github.com/hadley/ggplot2/issues/817 了解有关此问题的讨论。不过,ggplot2 dev 已经停止了一段时间,因此可能无法快速响应该问题。