放置在ggmap坐标上的小ggplot2图

时间:2017-07-31 08:43:08

标签: r ggplot2 ggmap

我想首先使用ggmap绘制经度和​​纬度为轴的特定区域。

然后我想在特定位置放置小ggplot2图,给出它们的经度和纬度。这些可以是主题极少的条形图。

我的数据库可能包含以下列:

1. town
2. longitude
3. latitude
4. through 6. value A, B, C

我生成一个图(伪代码)

p <- ggmap(coordinates) 

我有我最小的ggplot2设计

q<-ggplot2()+geom_bar(....)+ ... x-axis null y axis null minimal template

如何将这两种设计结合起来,使ggmap具有强加在地图特定坐标上的小的最小ggplot图?

1 个答案:

答案 0 :(得分:5)

这是我使用饼图作为散点图上的点所做的。您可以使用相同的概念将条形图放在特定纬度/经度坐标的地图上。

enter image description here

需要进一步更新。使用的一些代码是从另一个答案中缩写的,后来被删除了。如果您通过搜索引擎找到这个答案,请发表评论,然后我就可以将其收回来。

更新

R::ggplot2::geom_points: how to swap points with pie charts?

主要使用你回答的改编代码,但我不得不更新几行。

df.grobs <- df %>% 
  do(subplots = ggplot(., aes(1, value, fill = component)) + 
       geom_col(position = position_dodge(width = 1), 
                alpha = 0.75, colour = "white") +
       geom_text(aes(label = round(value, 1), group = component), 
                 position = position_dodge(width = 1),
                 size = 3) +
       theme_void()+ guides(fill = F)) %>% 
  mutate(subgrobs = list(annotation_custom(ggplotGrob(subplots), 
                                           x = lon-0.5, y = lat-0.5, 
                                           xmax = lon+0.5, ymax = lat+0.5))) 

此更改可以更好地进行投射,并消除有关重复比例的警告。

geom_col

这里我明确指定了geom_text的闪避宽度,因此我可以将其与round(value, 1)匹配。我使用x作为标签美学,并自动从y调用继承subplots = ggplot(...)df.grobs %>% {p + .$subgrobs + geom_text(data=df, aes(label = name), vjust = 3.5, nudge_x = 0.065, size=2) + geom_col(data = df, aes(Inf, Inf, fill = component), colour = "white")} 美学。我还手动将大小设置为非常小,因此标签适合,但随后我增加了每个subgrob的整体边界框,每个方向从0.35增加到0.5。

geom_col

我在这里所做的唯一改变就是“幽灵”{{1}}的美学。当它们设置为0,0时它们根本没有绘制,因为它不在x和y限制范围内。通过使用Inf,Inf,它们被绘制在最右上角,这足以使它们不可见,但仍然为图例绘制。