2012-06-22 18 views
5

I tienen una trama de datos que contiene un número de (x,y,z) puntos de datos, (x,y) es la parte inferior derecha de coordenadas de una célula de longitud-latitud de tamaño w (por ejemplo, una rejilla de 1 grado) . El valor z se promedió en esta celda.R Plot Filled células longitud-latitud de cuadrícula en mapa

me gustaría trazar estos puntos en R de modo que toda la celda de la cuadrícula se llena con un poco de color derivado de z.

El resultado sería algo como una de estas imágenes: longitude-latitude grid cells filled

La proyección en sí (por ejemplo cónica conforme de Lambert, equirectangular) no es importante, sólo el trazado celda de la cuadrícula.

Mis datos son escasos: no todas las celdas de latitud y longitud tendrán datos asociados.

Mi esperanza sería una solución similar a

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

donde 0,5 es la resolución de la rejilla por encima, lo que indica una célula de 0,5 grados.

¿Alguna idea?

Gracias!

+1

un placer, @PaulHiemstra . Su respuesta fue precisa sobre qué buscar, solo quería combinar las cosas un poco más. Muchas gracias por su ayuda. – Richard

Respuesta

6

Una alternativa al uso ya sea spplot o image es utilizar ggplot2. Las geometrías relevantes son geom_raster y geom_tile. El primero se supone que rinde mejor y produce archivos más pequeños, y el segundo es más estándar.El ejemplo siguiente llamada:

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

orginates de this blogpost mío. Además, ggplot2 admite una variedad de proyecciones a través del paquete mapproj, consulte coord_map para obtener más información.

El siguiente es un ejemplo de trabajo (siempre y cuando haya definido YOUR_DATA tener x, y, z columnas):

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) 
3

Si su hoja.de.datos es "x", intente esto:

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

Para conseguir una muy exacta respuesta que debe dar una muestra de sus datos, es de esperar todo un hoja.de.datos o la fuente de donde se descargar y el código que se utiliza para leer en R.

Si el código anterior falla en el paso gridded()<- entonces es probable que sus x y y valores no proporcionan realmente una cuadrícula regular, lo que está implícito en sus parcelas. Si realmente son valores de longitud/latitud reticulados y debe proyectarlos a los de su imagen, consulte el paquete raster, o más generalmente el paquete rgdal.

library(raster) 
?projectRaster 

library(rgdal) 
?project 
?spTransform 

(Las parcelas se ven a mí como uno de los "Albers y cónica conforme de Lambert Proyecciones de América del Norte", como se muestra en este sitio: http://www.colorado.edu/geography/gcraft/notes/mapproj/mapproj_f.html).

Consulte http://spatialreference.org para obtener el cordel PROJ.4 para su proyección que puede usar en sp o raster.

+0

La proyección en sí no es importante, solo el trazado de la celda de la cuadrícula. Editaré la pregunta para reflejar esto. – Richard

+0

Mi respuesta todavía es relevante. También funciona para coordenadas dispersas, siempre que sean regulares. Sin conocer la proyección ni nada acerca de sus datos, solo podemos adivinar, y la proyección es muy importante hasta que nos proporcione suficientes detalles para saber lo que realmente tiene y lo que realmente quiere con esas líneas de cuadrícula. – mdsumner

2

Se ha intentado realizar ese tipo de mapa recientemente y terminamos usando la función interp de la biblioteca akima a intrapolate mis datos z en una cuadrícula regular antes de trazar (cualquier tipo de proyecciones tendrá que hacerse antes de la utilización de 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) 
0

usted puede hacer esto:

library(raster) 
r <- rasterFromXYZ(xyz) 
plot(r) 
Cuestiones relacionadas