2

ggmap を使用して地図上に位置をプロットしようとしています。ファセットを使用したいので、base_layer引数をに指定する必要がありggmapます。また、これを関数にラップしようとしています。

マップの境界ボックスを定義する変数があります。

long.range <- c(-71.5, -67.5)
lat.range <- c(42.5, 44.5)

そして、プロットしたいデータを定義する data.frame :

test.data <- data.frame("Name" = c("site1","site2","site3"),
                        "LAT" = c(43.25,43.4,44),
                        "LONG" = c(-71.25,-69.5,-68.5))

外に出てマップを取得し、data.frame を base_layer として適用する関数があります。

CreateBaseMap <- function(lat.range = c(NA,NA),
                          long.range = c(NA,NA),
                          data.in = NULL){    
  # download the map tile
  base.map.in <- get_map(location = c(min(long.range),
                                      min(lat.range),
                                      max(long.range),
                                      max(lat.range)),
                         source = "osm")
  # create the map object
  if (is.null(data.in)){
    base.map <- ggmap(base.map.in)
  } else {    
    base.map <- ggmap(base.map.in,
                      base_layer = ggplot(aes_string(x = "LONG",
                                                     y = "LAT"),
                                          data = data.in))
  }
  base.map <- base.map +
    labs(x = "Longitude",
         y = "Latitude") + 
    coord_map()
  print(base.map)
  return(base.map)
}

そして、次を使用して関数を呼び出します

base.map <- CreateBaseMap(lat.range = lat.range, long.range = long.range, data.in = test.data)

このエラーが発生します。

Error in ggplot(aes_string(x = "LONG", y = "LAT"), data = data.in) : 
  object 'data.in' not found

これまでのトラブルシューティング

次のように、関数の中身を直接呼び出すかどうかはわかります。

base.map <- ggmap(get_map(location = c(min(long.range),
                                       min(lat.range),
                                       max(long.range),
                                       max(lat.range)),
                          source = "osm"),
                  base_layer = ggplot(aes_string(x = "LONG",
                                                 y = "LAT"),
                                      data = test.data)) +
  geom_point()
print(base.map)

その後、正常に動作します。

欲しいイメージ

print(data.in)への呼び出しに到達する前に data.in が存在することも確認しましたが、base_layerそこにあることがわかります。

質問

への呼び出しが をbase_layer認識しないようdata.inです。

  1. どうすればbase_layer本当に受け入れたいと説得できdata.inますか?
  2. これは の問題ggplotですか、それとも何か間違っていますか?
4

1 に答える 1