2012-09-05 13 views
5

Ho un file netcdf che vorrei di visualizzare solo la mappa di profondità del terrenoCome visualizzare una mappa da un file 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" 

Sembra che devo collegare le latitudini con longitudini così come i punti di terra per ottenere una mappa della profondità del suolo . Sono davvero confuso. Nessuno mi può aiutare con questo tipo di dati.

+0

La dimensione della griglia è (360 * 150 = 54e3), mentre la dimensione del vostro 'variabile land' è 15238, che non è un multiplo del vostro gridSize. Hai una spiegazione per questo? –

+0

Dove hai preso questi dati? O l'hai creato tu stesso? La differenza potrebbe essere causata dalla presenza di valori NA, cioè non c'è profondità del suolo nell'oceano. –

+1

'land' non è una variabile ma un'altra dimensione quindi non deve essere di dimensione x * y – plannapus

risposta

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 

Come è stato detto nel riepilogo per il file netcdf, la variabile SoilDepth dipende dimensione land e non su x e y quindi non sono sicuro da dove viene, che si lascia quando si tratta di tracciare questo set di dati .

Modifica

Sembra che v'è una chiave che collega x, y e 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 

Quindi, al fine di tracciare:

# 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

Il solo richiamo del plot sul risultato di 'get.var.ncdf (nc," SoilDepth ")' anche non produce un buon timeseries. Strano file ... –

+0

Esiste probabilmente una relazione implicita tra dimensione 'land' e dimensions' x' e 'y' ma non riesco a trovarlo ... – plannapus

+0

Ho anche difficoltà a trovare una relazione. L'OP deve chiedere al creatore dei dati ... –

5

Vuoi visualizzarlo con R?

Se non è un problema di visualizzare con un altro software, è possibile utilizzare ncBrowse, disponibili here, o Panoply, una più complessa, fornite dalla NASA, che è possibile donwload here.

Se si desidera lavorare con R, è possibile utilizzare il pacchetto ncdf. Sarai in grado di estrarre i tuoi dati grazie alla funzione get.var.ncdf. Puoi tracciarlo grazie al pacchetto sp e alla funzione spplot o utilizzare il pacchetto rgl (oppure scatterplot).

+0

Ho aggiunto del codice per risolvere questo problema alla risposta di @plannapus –

11

Preferisco utilizzare il pacchetto ggplot2 per la visualizzazione. Utilizzando la soluzione eccellente di @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


Se si desidera cambiare il titolo di un asse, fare non cambiamento il nome della variabile in aes. Questi valori si riferiscono alle colonne nei dati e la loro modifica porta all'errore che si ottiene, non vi è alcun asse denominato X in land_df. Se si desidera modificare il nome posizionato sull'asse:

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

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

+0

Se ti infastidiscono, dovresti essere in grado di rimuoverlo facendo: + theme (axis.title = element_blank()) – JEquihua

4

Per l'analisi rapida dei file è possibile utilizzare ncview. Le mappe non sono particolarmente carine, ma molto funzionali per avere un'idea di come appare un dato file. Anche questo funziona facilmente su server remoti.

vedere qui: http://meteora.ucsd.edu/~pierce/ncview_home_page.html

Problemi correlati