将ggplot2小图放置在ggmap的坐标上

Jac*_*ski 5 r ggplot2 ggmap

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

然后,考虑到经度和纬度,我想将ggplot2小图放在特定位置。这些可以是主题最少的酒吧。

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

1. town
2. longitude
3. latitude
4. through 6. value A, B, C
Run Code Online (Sandbox Code Playgroud)

我生成一个图(伪代码)

p <- ggmap(coordinates) 
Run Code Online (Sandbox Code Playgroud)

而且我有最小的ggplot2设计

q<-ggplot2()+geom_bar(....)+ ... x-axis null y axis null minimal template
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ian 7

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

R :: ggplot2 :: geom_points:如何用饼图交换点?

需要进一步更新。所使用的某些代码已从另一个答案中缩写出来,此答案已被删除。如果您通过搜索引擎找到了这个答案,请发表评论,然后我将充实它。


更新:

在此处输入图片说明

大部分使用您改编的代码,但我不得不更新几行。

p <- ggmap(Poland) + coord_quickmap(xlim = c(13, 25), ylim = c(48.8, 55.5), expand = F)
Run Code Online (Sandbox Code Playgroud)

此更改可以更好地预测并消除有关重复刻度的警告。

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))) 
Run Code Online (Sandbox Code Playgroud)

在这里,我为您明确指定了躲闪宽度,geom_col以便与匹配geom_text。我使用round(value, 1)了标签美学,它会自动从调用中继承xy美学subplots = ggplot(...)。我还手动将尺寸设置为非常小,以便标签可以容纳,但随后我将每个子对象的总体边界框从每个方向上的0.35增大到0.5。

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")}
Run Code Online (Sandbox Code Playgroud)

我在这里所做的唯一更改是为了“鬼魂”的美学geom_col。当将它们设置为0,0时,根本不会绘制它们,因为这不在x和y范围内。通过使用Inf,Inf,它们被绘制在最右上角,足以使它们不可见,但仍为图例绘制。