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)