【问题标题】:geom_map borders in ggplot2 - revisitedggplot2 中的 geom_map 边界 - 重新访问
【发布时间】:2012-05-13 15:19:29
【问题描述】:

我在this question 中遇到了与@Mike 类似的问题。问题是如何设置地图中区域的轮廓颜色。

建议的解决方案是添加一个geom_polygon 来绘制边界。只要绘制了整个区域,这将起作用。当试图限制到一个子区域时,多边形会被奇怪地绘制(可能是因为一些顶点被丢弃)。使用标准的geom_map 示例:

# Create example data
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3"))
values <- data.frame(id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5))
positions <- data.frame(
  id = rep(ids, each = 4),
  x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
  y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2)
)

# Plot data
ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id), map = positions) +
    geom_polygon(aes(x,y,group=id), fill = NA, colour = 'red', data = positions) +
    expand_limits(positions) +
    ylim(0, 3)

一种可能的解决方法是使用geom_map 中的颜色美学,然后使用scale_colour_manual 手动选择轮廓颜色,如下所示:

ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id, colour = 'white'), map = positions) +
    scale_colour_manual(values=c('white')) +
    expand_limits(positions) +
    ylim(0, 3)

所以我有两个问题:

  1. 为什么限制轴限制时geom_polygon不能正常工作?
  2. 有没有比这里展示的更优雅的轮廓着色解决方案?

以下是绘图输出。非常感谢。

【问题讨论】:

    标签: r map ggplot2


    【解决方案1】:

    我相信您对为什么它不起作用是正确的。使用 xlimylim 限制 x 或 y 限制会在绘图之前剪辑数据。这最终会从你的多边形中省略一些顶点,所以有些东西不会被绘制出来。

    这就是coord_cartesian 的原因,它允许您调整 x 和 y 限制 不裁剪数据。它会“放大”到正确的区域,而不是剪裁然后绘图。

    所以不要使用ylim,而是尝试+ coord_cartesian(ylim = c(0,3))

    【讨论】:

    • 这很好用,谢谢!这是一个细节,但你知道我第二个问题的答案吗?为什么我不能直接在geom_map函数中使用colour = white aestetic?
    • @yellowcap 我不知道,主要是我不确定你在第二种情况下的具体问题是什么。
    • @yellowcap 可能为时已晚,无法提供帮助,但您希望 colour="white" 出现在 geom_map 调用中,而不是 aes 调用中。这不是美学,因为它不依赖于您的数据。它总是白色的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多