График не регулярных данных lon / lat в R - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть фрейм данных, который имеет координаты UTM и значение для данной переменной. Я хочу нанести эти данные на базовую карту ggmap , используя geom_tile в ggplot2 , используя координаты lon / lat. Однако, когда я конвертирую из UTM в lon / lat, ячейки перестают быть регулярными, что вызывает проблемы.

# load packages
library(sp)
library(rgdal)
library(ggplot2)
library(ggpubr)

# make UTM coordinate dataframe
df_UTM <- data.frame(x=seq(238129,253529,200),
                     y=rep(seq(-4035580,-4008580,200), each=78),
                     var=sample(12:20, 10608, replace=T))

Я могу построить этот штраф, используя geom_tile из ggplot2.

# geom tile with UTM data frame
ggplot(data=df_UTM, aes(x=x, y=y,fill=var)) +
  geom_tile() +
  ggtitle('geom_tile method')

geomtile on UTM

Когда я перехожу из UTM в lon / lat, у меня возникают проблемы. После этого я больше не могу создавать растр или использовать geom_tile, поскольку ячейки данных больше не являются регулярными и ничего не отображается. Я могу немного обойти это, округлив координаты lon / lat, но затем получаю неоднородное покрытие данных, которые не выглядят привлекательными.

# convert to lon/lat
df_lonlat <- df_UTM
xy = data.frame(df_UTM$x, df_UTM$y)
coordinates(xy) <- c("df_UTM.x", "df_UTM.y")
proj4string(xy) <-  CRS("+proj=utm +zone=56Hellps=WGS84")
res <- spTransform(xy,CRS("+proj=longlat +datum=WGS84"))
df_lonlat[,c('x','y')] <- data.frame(res@coords)

# geom tile with lon/lat
p1 <- ggplot(data=df_lonlat, aes(x=x, y=y,fill=var)) +
  geom_tile() +
  ggtitle('Before rounding')

# round lon/lat
df_lonlat[,c('x','y')] <- round(df_lonlat[,c('x','y')], 3)

# geom tile with lon/lat
p2 <- ggplot(data=df_lonlat, aes(x=x, y=y,fill=var)) +
  geom_tile() +
  ggtitle('After rounding')

# join plots
ggarrange(p1, p2)

geom tile on lonlat

Причина, по которой я хочу это сделать, заключается в том, что я хочу проецировать свои данные на базовую карту (используя ggmap). Вот пример моих усилий с использованием моего реального набора данных. Я хочу, чтобы он был непрерывным, а не пятнистым, как на следующем рисунке.

The goal

Как я могу отобразить эти данные в формате lon / lat, чтобы они охватывали мой регион и не были разбиты? Рад использовать другие пакеты и подходы. Спасибо!

...