R Участок заполненных ячеек широты долготы на карте

У меня есть фрейм данных, содержащий ряд (x,y,z) точки данных, (x,y) нижняя правая координата ячейки долготы-широты размера w (например, 1-градусная сетка). z значение было усреднено по этой ячейке.

Я хотел бы построить эти точки в R так, чтобы вся ячейка сетки была заполнена цветом, полученным из z,

Результат будет выглядеть примерно так:заполнены ячейки сетки долготы и широты

Сама проекция (например, конформная коническая Ламберта, равноугольная) не важна, просто построение ячеек сетки.

Мои данные редки: не каждая ячейка долготы и широты будет иметь связанные с ней данные.

Я надеюсь, что решение будет похоже на

library(maps)
map("state")
grid_points(my_data,c("x","y","z"),0.5)

где 0,5- разрешение сетки выше, обозначающее ячейку 0,5 градуса.

Какие-нибудь мысли?

Спасибо!

4 ответа

Решение

Альтернатива использованию либо spplot или же image это использовать ggplot2, Соответствующие геометрии geom_raster а также geom_tile, Первый должен работать лучше и давать меньшие файлы, а второй более стандартный. Следующий пример вызова:

ggplot(aes(x = x, y = y, fill = value), data = dat_grid) + geom_tile() + 
  geom_path(data = ant_ggplot)

происходит от этого моего поста. К тому же, ggplot2 поддерживает ряд проекций через mapproj посмотри, посмотри coord_map Больше подробностей.

Ниже приведен рабочий пример (при условии, что вы определили YOUR_DATA иметь столбцы x,y,z):

library(ggplot2)
library(maps)
us_states <- map_data("state")
(ggplot(aes(x=x,y=y,fill=z),data=YOUR_DATA) + geom_tile())+geom_polygon(data=us_states,aes(x=long, y=lat, group=group), colour="black", fill="white", alpha=0)

Если ваш data.frame "x", попробуйте это:

library(sp)
coordinates(x) <- c("x", "y", "z")
gridded(x) <- TRUE
image(x, col = terrain.colors(256), useRaster = TRUE)

Чтобы получить действительно точный ответ, вы должны предоставить образец своих данных, мы надеемся, весь data.frame или источник, из которого вы скачали, и код, который вы использовали для чтения их в R.

Если приведенный выше код не работает на gridded()<- шаг тогда это скорее всего ваш x а также y значения на самом деле не обеспечивают регулярную сетку, которая подразумевается вашими графиками. Если они действительно являются сеточными значениями долготы / широты, и вам необходимо спроецировать их на те, что на вашем изображении, то посмотрите raster пакет или, в более общем смысле, rgdal пакет.

library(raster)
?projectRaster

library(rgdal)
?project
?spTransform

(Графики похожи на одну из "Конформных конических проекций Ламберта и конформных проекций Ламберта Северной Америки", показанных на этом сайте: http://www.colorado.edu/geography/gcraft/notes/mapproj/mapproj_f.html).

Смотрите http://spatialreference.org/ чтобы получить строку PROJ.4 для вашей проекции, которую вы можете использовать в sp или же raster,

Я пытался сделать такую ​​карту недавно и в итоге использовал функцию interp библиотеки akima для интерполяции моих данных z в регулярную сетку перед построением графика (любые проекции должны быть сделаны до использования interp):

library(akima)
interp(x,y,z,xo=seq(min(x),max(x),by=0.5),yo=seq(min(y),max(y),by=0.5),extrap=FALSE,linear=TRUE) -> xygrid
image(xygrid,breaks=seq(min(z),max(z),length=10), col=1:10)

Вы можете сделать это:

library(raster)
r <- rasterFromXYZ(xyz)
plot(r)
Другие вопросы по тегам