缩放地图以适合点FACET_WRAP

时间:2017-03-04 13:21:27

标签: r ggplot2

我有一些地图数据被分成几组并想要绘制一个facet_wrap

这是我到目前为止的代码:

library(dplyr)
library(ggplot2)

test_points =data.frame( map = c(rep("AAA", 5),rep("BBB", 5),rep("CCC", 5),rep("DDD", 5)),
                          LAT = c(runif(5, -90, -45), runif(5, -45, 0), runif(5, 0, 45), runif(5, 45, 90)),
                      LON = c(runif(5, -180, -90), runif(5, -90,0), runif(5, 0, 90), runif(5, 90, 180)))

map_lim = test_points %>%
            group_by(map) %>% 
            summarise(y_min = floor(min(LAT)),
                      y_max = ceiling(max(LAT)),
                      x_min = floor(min(LON)),
                      x_max = ceiling(max(LON)))

worldmap = map_data("world")

ggplot() +
    geom_polygon(data = worldmap,
                 aes(x = long, y = lat, group = group)) +
    geom_point(data = test_points,
               aes(x = LON, y = LAT, group= map, colour = map)) +
    #coord_cartesian(
    #        ylim=c(map_lim[ map_lim$map==map, 2], map_lim[ map_lim$map==map, 3]),
    #        xlim=c(map_lim[ map_lim$map==map, 4], map_lim[ map_lim$map==map, 5])
    #) +
    coord_cartesian(
            ylim=c(map_lim$y_min, map_lim$y_max),
            xlim=c(map_lim$x_min, map_lim$x_max)
    ) +
    facet_wrap(~ map, scales = "free")

你可以看到我尝试了两种限制坐标的方法..既不起作用。

我得到的是整个世界......每个都有五分。

是否可以单独扩展每个地图?

1 个答案:

答案 0 :(得分:0)

geom_mapgeom_polygon好,因为它会自动截断到点等所需的区域。

worldmap <- map_data("world")

ggplot() +
  geom_map(data = worldmap, map = worldmap, mapping = aes(map_id = region)) +
  geom_point(data = test_points,
             aes(x = LON, y = LAT, group= map, colour = map)) +
  coord_equal() +
  facet_wrap(~ map, scales = "free")

唯一的问题是scales = "free"没有使用非笛卡尔坐标,因此您无法使用coord_map或特定的制图投影。如果您的纬度相似,coord_fixed可能会更好。