2012-09-05 15 views
5

Tengo un archivo netcdf que me gustaría simplemente visualizar el mapa de profundidad del suelo¿Cómo visualizar un mapa desde un archivo netcdf?

[1] "file C:\\Users\\SoilDepth-gswp.nc has 3 dimensions:" 
    [1] "x Size: 360" 
    [1] "y Size: 150" 
    [1] "land Size: 15238" 
    [1] "------------------------" 
    [1] "file C:\\SoilDepth-gswp.nc has 3 variables:" 
    [1] "float nav_lon[x,y] Longname:Longitude Missval:1e+30" 
    [1] "float nav_lat[x,y] Longname:Latitude Missval:1e+30" 
    [1] "float SoilDepth[land] Longname:Soil depth Missval:1.00000002004088e+20" 

Parece que tengo que conectar las latitudes con las longitudes, así como los puntos de la tierra para obtener un mapa de la profundidad del suelo . Estoy realmente confundido. ¿Alguien puede ayudarme con este tipo de datos?

+0

El tamaño de la cuadrícula es (360 * 150 = 54e3), mientras que el tamaño de la variable 'land' es 15238, que no es un múltiplo de su gridSize. ¿Tienes una explicación para esto? –

+0

¿De dónde sacaste esta información? ¿O lo creaste tú mismo? La diferencia puede ser causada por la presencia de valores NA, es decir, no hay profundidad del suelo en el océano. –

+1

'land' no es una variable sino otra dimensión así que no tiene que ser del tamaño x * y – plannapus

Respuesta

10
library(ncdf) 
# I'm assuming this is the netcdf file you are working with: 
download.file("http://dods.ipsl.jussieu.fr/gswp/Fixed/SoilDepth.nc", destfile="SoilDepth.nc") 
soil <- open.ncdf("SoilDepth.nc") 
#The way to extract a variable is as following: 
soil$var[[3]] -> var3 # here, as shown in your question, SoilDepth is the 3rd variable 
get.var.ncdf(soil, var3) -> SoilDepth 

dim(SoilDepth) 
[1] 15238 

Como se dijo en el resumen de su archivo netcdf, la variable SoilDepth depende de la dimensión land solamente y no en x y y así que no estoy seguro de que eso le deja cuando se trata de trazar este conjunto de datos .

Editar

Resulta que hay una clave que une x, y y land:

download.file("http://dods.ipsl.jussieu.fr/gswp/Fixed/landmask_gswp.nc", destfile="landmask.nc") 
landmask <- open.ncdf("landmask.nc") 
landmask$var[[3]] -> varland 
get.var.ncdf(landmask, varland) -> land 
sum(land==1) 
[1] 15238 

Así que con el fin de trazar:

# The values where stored in an expected order, hence the transpose 
land = t(land) 
land[land==1] <- SoilDepth 
land[land==0] <- NA 
land = t(land) 
image(land) 

enter image description here

+0

El solo hecho de llamar a la gráfica sobre el resultado de 'get.var.ncdf (nc," SoilDepth ")' tampoco da buenos tiempos. Extraño archivo ... –

+0

Probablemente exista una relación implícita entre la dimensión 'tierra' y las dimensiones' x' e 'y', pero no puedo encontrarla ... – plannapus

+0

También me cuesta encontrar una relación. El OP necesita preguntar al creador de los datos ... –

5

¿Quieres visualizarlo con R?

Si no es un problema para visualizar con otro software, puede utilizar ncBrowse, disponible here, o Panoplia, una más compleja, proporcionada por la NASA, que se puede donwload here.

Si quiere trabajar con R, puede usar el paquete ncdf. Podrá extraer sus datos gracias a la función get.var.ncdf. Puede trazarlo gracias al paquete sp y la función spplot o usar el paquete rgl (o scatterplot).

+0

Agregué un código para arreglar este problema con la respuesta de @plannapus –

11

Prefiero usar el paquete ggplot2 para la visualización. Usando la excelente solución de @plannapus:

require(reshape) 
require(ggplot2); theme_set(theme_bw()) 
land_df = melt(land) 
ggplot(aes(x = X1, y = X2, fill = value), data = land_df) + 
    geom_raster() + coord_equal() + 
    scale_fill_continuous(na.value = "transparent") 

enter image description here


Si desea cambiar el título de un eje, lo hacen no el cambio del nombre de la variable en aes. Estos valores se refieren a columnas en los datos, y al cambiarlos se genera el error que se obtiene, no hay un eje llamado X en land_df. Si desea cambiar el nombre colocado en el eje:

ggplot(aes(x = X1, y = X2, fill = value), data = land_df) + 
    geom_raster() + coord_equal() + 
    scale_fill_continuous(na.value = "transparent") + 
    scale_x_continuous("X") 
+0

Lea '? Scale_fill_continuous', o http://had.co.nz/ggplot2/scale_continuous.html –

+0

Si le molestan, debería poder eliminarlos haciendo: + theme (axis.title = element_blank()) – JEquihua

4

Para buscar rápidamente archivos, puede usar ncview. Los mapas no son particularmente bonitos, pero son muy funcionales para tener una idea de cómo se ve un archivo determinado. También esto funciona fácilmente en servidores remotos.

Ver aquí: http://meteora.ucsd.edu/~pierce/ncview_home_page.html

Cuestiones relacionadas