在 R 中绘制和分面地图

Plot and facet a map in R

主数据框

data.frame(lat = c(38.6938, 38.4262, 32.7607, 37.083, 39.4619, 41.0042),
                 lon = c(-9.20587, -8.90007, -16.9595, -8.90918, -8.38391, -7.9699),
                 views = c(13565, 27020, 74420, 18550, 73253, 14615),
                 challenge = c("SPOT CIDADE", "SPOT NATUREZA I",
                               "SPOT NATUREZA II", "SPOT ROMANCE",
                               "SPOT PATRIMONIO", "SPOT GASTRONOMIA"),
                 stringsAsFactors = FALSE)

我正在尝试绘制地图以供打印,结果将是每个挑战的地图,并且点会根据每个视频的观看次数改变大小。

到目前为止,我的代码将所有点都放在同一张地图上 - 我在分面和更改点大小方面遇到了问题。

当我改变美学中的变量时,分数会变得很大。

缩放级别太近或太远。

我使用的代码如下。 我看到的每个例子要么离我需要的太远,要么根本就不需要 工作。

我做得对吗,还是需要另一种方法?

谢谢!

library(ggplot2)
library(ggmap)

lon <- as.numeric(new$lon)
lat <- as.numeric(new$lat)


spots_df <- as.data.frame(cbind(lon, lat))

mapa_spots <- get_map(location = c(lon = mean(spots_df$lon), lat = mean(spots_df$lat)), zoom = 6, maptype = "terrain", scale = 2)

plot_spots <- ggmap(mapa_spots) +
  geom_point(data = spots_df, aes(x = lon, y = lat, fill = "red", alpha = 0.8), size = 2, shape = 21) +
  guides(fill=FALSE, alpha=FALSE, size=FALSE)

plot_spots 

我从这段代码得到的结果:

假设您的数据框名为 dt,这里是 and 的图。关键是将 base_layer 参数与 ggplot(dt, aes(...)) 一起使用,这样您就可以像调用 ggplot 一样进一步添加其他 geom。您在评论中提到您希望每个挑战都在单独的地图中。我认为 facet_wrap 可能是您要找的。

library(ggplot2)
library(ggmap)

mapa_spots <- get_map(location = c(lon = mean(dt$lon), 
                                   lat = mean(dt$lat)), 
                      zoom = 6, maptype = "terrain", scale = 2)

ggmap(mapa_spots, base_layer = ggplot(dt, aes(x = lon, y = lat, size = views))) +
  geom_point() +
  facet_wrap(~challenge, ncol = 3)

数据

dt <- data.frame(lat = c(38.6938, 38.4262, 32.7607, 37.083, 39.4619, 41.0042),
                 lon = c(-9.20587, -8.90007, -16.9595, -8.90918, -8.38391, -7.9699),
                 views = c(13565, 27020, 74420, 18550, 73253, 14615),
                 challenge = c("SPOT CIDADE", "SPOT NATUREZA I",
                               "SPOT NATUREZA II", "SPOT ROMANCE",
                               "SPOT PATRIMONIO", "SPOT GASTRONOMIA"),
                 stringsAsFactors = FALSE)