这是我使用饼图作为散点图上的点所做的。您可以使用相同的概念将条形图放置在特定纬度/经度坐标的地图上。
R::ggplot2::geom_points: how to swap points with pie charts?
需要进一步更新。使用的一些代码是从另一个答案中缩写的,该答案已被删除。如果您通过搜索引擎找到此答案,请发表评论,我会尽快补充。
更新:
主要使用您的答案中的改编代码,但我不得不更新几行。
p <- ggmap(Poland) + coord_quickmap(xlim = c(13, 25), ylim = c(48.8, 55.5), expand = F)
此更改可以更好地投影并消除有关重复比例的警告。
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) 作为标签美学,它自动从subplots = ggplot(...) 调用继承x 和y 美学。我还手动将大小设置为非常小,以便标签适合,但随后我将每个 subgrob 的整体边界框从每个方向从 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")}
我在这里所做的唯一改变是为了“幽灵”geom_col 的美学。当它们设置为 0,0 时,它们根本没有被绘制,因为那不在 x 和 y 限制内。通过使用 Inf,Inf,它们被绘制在最右上角,这足以使它们不可见,但仍为图例绘制。