Combinaison de 4 plot et 1 spplot

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Quynh-Mai Chu
Messages : 37
Enregistré le : 03 Oct 2013, 20:53

Combinaison de 4 plot et 1 spplot

Messagepar Quynh-Mai Chu » 27 Fév 2014, 20:25

Bonjour,

Je rencontre des problèmes pour combiner les graphes "plot" avec le graphe "spplot". Mon idée est de produire 4 cartes de température (créer par la fonction "stack" et générer par la fonction "spplot"). Chacune des cartes est accompagnée d'un plot de la température en fonction de la latitude (deux en haut et deux en bas). Tous les graphes se situent donc dans la même figure. Voici le code:

Code : Tout sélectionner

 
library(ncdf)

DATA <- open.ncdf("G:/Drop/Dropbox/Master1/ComplModClim/Travail/Data/tas_Amon_EC-EARTH_historical_r1i1p1_194001-200911.nc")

t <- get.var.ncdf(DATA, "time")
lon <- get.var.ncdf(DATA, "lon")
lat <- get.var.ncdf(DATA, "lat")
tas <- get.var.ncdf(DATA, "tas")

Nt <- length(t)
nlon <- length(lon)
nlat <- length(lat)

n <- 1:nlon

lon1 <- lon[n > nlon/2]-360;
lon2 <- lon[n <= nlon/2];
lon_transf <- c(lon1, lon2);

tas_transf <- array(dim=c(nlon, nlat, Nt));
tas_transf[n <= nlon/2,,] <- tas[n > nlon/2,,];
tas_transf[n > nlon/2,,] <- tas[n <= nlon/2,,];

library(raster)

# creation de raster

for(i in seq(4)){
 
  assign(paste0("r", i), flip(raster(x = t(tas_transf[ , , i + 10 * (i - 1)]), xmn = min(lon_transf), xmx = max(lon_transf), ymn = min(lat), ymx = max(lat)), direction="y"))
 
}

## Empilement de raster

r <- stack(r1, r2, r3, r4)

## Nom des rasters

names(r) <- paste("Date", 1:4)

couleur <- c(rgb(255/255,255/255,178/255), rgb(254/255,204/255,92/255), rgb(253/255,141/255,60/255), rgb(227/255,26/255,28/255));
color_plate <- colorRampPalette(couleur, space="rgb");

## Cartes avec pays

library(maps)
world <- map(regions = ".", fill = TRUE, plot = FALSE)
library(maptools)

## Conversion map --> SpatialPolygons

nam <- strsplit(world$names, ":")
id  <- sapply(nam, function(x) x[1])
World <- map2SpatialPolygons(world, IDs = id, proj4string = CRS("+proj=longlat"))

## Trace les cartes (premier plot)

X11();

z <- spplot(r, col.regions = color_plate(100), panel = function(...){panel.gridplot(...); sp.polygons(World)})
print(z)

## Second plot
par(fig=c(0,0.5,0.72,0.9),new=TRUE,mar=c(1,1,1,1))

tas1 <- tas[100,,2]

plot(lat, tas1, type="l")

## Troisieme plot

par(fig=c(0.55,1,0.72,0.9),new=TRUE,mar=c(1,1,1,1))

tas2 <- tas[100,,12]

plot(lat, tas2, type="l")

## Quatrieme plot

par(fig=c(0,0.5,0,0.2),new=TRUE,mar=c(1,1,1,1))

tas3 <- tas[100,,3]

plot(lat, tas3, type="l")

## Cinquieme plot

par(fig=c(0.55,1,0,0.2),new=TRUE,mar=c(1,1,1,1))

tas4 <- tas[100,,30]

plot(lat, tas4, type="l")

par(fig=c(0,1,0.4,0.7), new=T)



Le fichier de donnée associé à ce code se situe sur le lien: https://dl.dropboxusercontent.com/u/529 ... -200911.nc

Pour pouvoir afficher plusieurs graphes tout en contrôlant leur taille, j'utilise la fonction par(fig=c(x1, x2, y1, y2), new=T). Le problème est que cela ne marche pas pour la fonction "spplot". En effet, les cartes disparaissent pour mettre les 4 "plot". Y a-t-il une commande similaire à par(fig) qui tient compte de l'ajout d'autres graphes après avoir produit les cartes? Sinon, comment s'y prendre?

Merci d'avance,

Mai

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 28 Fév 2014, 14:07

Les deux modèles graphiques utilisés sont différents et incompatibles. Solution: papier, ciseaux et colle :-)
Renaud


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité