Groupe des utilisateurs du logiciel R Index du Forum Groupe des utilisateurs du logiciel R
Un forum francophone d'échange autour du logiciel de calcul statistique R dans le domaine de la recherche agronomique tropicale
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Parametrage de fenetre graphique et production de cartes

 
Poster un nouveau sujet   Répondre au sujet    Groupe des utilisateurs du logiciel R Index du Forum -> Questions en cours
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Gaspard CHARRIER



Inscrit le: 21 Mai 2011
Messages: 4
Localisation: Paris

MessagePosté le: Ven Mai 04, 2012 2:35 pm    Sujet du message: Parametrage de fenetre graphique et production de cartes Répondre en citant

Bonjour,

Je cherche à produire des cartes en série avec la fonction bubble() du package "sp".

J'utilise une boucle pour créer des cartes de mes différentes variables. Et j'aimerais pouvoir sortir mes différentes cartes sous la même fenêtre graphique.

J'ai pris en exemple ici les données sur la meuse du package "sp".

Code:
library(sp)
data(meuse)
coordinates(meuse) <- ~x+y


Je m'intéresse uniquement aux 4 premières variables, pour lesquelles je cherche à appliquer la fonction bubble() comme suit:

Code:
test<-meuse[,1:4]
bubble(test,zcol="cadmium",fill=TRUE,maxsize=2,do.sqrt=TRUE,col=2)


Je crée une boucle pour appliquer cette fonction à mes différentes variables:

Code:
for (i in 1:4)
{ carte<-bubble(test,zcol=i,fill=TRUE,maxsize=2,do.sqrt=TRUE,col=2)
print(carte)
}


Et c'est là que je coince, je voudrais que mes différentes cartes s'affichent sur la même fenêtre graphique... J'ai tenté sans succès d'utiliser par(mfrow=c(,)) ou layout=c(,) mais j'ai l'impression que rien ne se passe.

J'ai trouvé le paramètre "split" dans print() qui permet de diviser la fenêtre graphique, mais je n'arrive pas à comprendre comme l'intégrer dans une boucle.

Code:
a<-bubble(test,zcol="cadmium",fill=TRUE,maxsize=2,do.sqrt=TRUE,col=2)

print(a,split = c(1,1,3,2),more=TRUE)
print(a,split = c(2,1,3,2),more=TRUE)
print(a,split = c(3,1,3,2),more=TRUE)
print(a,split = c(1,2,3,2),more=FALSE)


Je pensais créer des facteurs qui contiendraient la position des graphiques et pouvoir les utiliser dans la boucle mais je ne saisi pas bien comme faire

Code:
x<-as.factor(c(1,2,1,2))
y<-as.factor(c(1,1,2,2))

for (i in 1:4)
{ carte<-bubble(test,zcol=i,fill=TRUE,maxsize=2,do.sqrt=TRUE,col=2)
  print(carte,split = c(x,y,2,2),more=TRUE)
}


Si vous avez une idée ou un autre moyen d'y arriver, je suis preneur.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Renaud Lancelot



Inscrit le: 16 Déc 2004
Messages: 2329
Localisation: CIRAD, Montpellier

MessagePosté le: Sam Mai 05, 2012 10:04 am    Sujet du message: Répondre en citant

Pourquoi pas:

Code:
library(sp)
data(meuse)
coordinates(meuse) <- ~ x + y

for(i in 1:4){
    nam <- paste("gr", i, sep = "")
    assign(nam, bubble(meuse, zcol = 2 + i, fill = TRUE, maxsize = 2, do.sqrt = TRUE, col = 2))
    }

print(gr1, split = c(1, 1, 2, 2), more = TRUE)
print(gr2, split = c(1, 2, 2, 2), more = TRUE)
print(gr3, split = c(2, 1, 2, 2), more = TRUE)
print(gr4, split = c(2, 2, 2, 2), more = FALSE)


NB: vous ne pouvez pas (facilement) mélanger les paramètres et fonctions graphiques de base (par(...), layout...) avec celles du package lattice.
_________________
Renaud
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Gaspard CHARRIER



Inscrit le: 21 Mai 2011
Messages: 4
Localisation: Paris

MessagePosté le: Mer Mai 09, 2012 9:46 am    Sujet du message: Répondre en citant

Oui, mais...

Imaginons par exemple que nous ayons une quinzaine de variables:

Code:
meuse1<-meuse[,1:6]

meuse1$ion1<-meuse1$cadmium
meuse1$ion2<-meuse1$copper
meuse1$ion3<-meuse1$lead
meuse1$ion4<-meuse1$zinc
meuse1$ion5<-meuse1$cadmium
meuse1$ion6<-meuse1$copper
meuse1$ion7<-meuse1$lead
meuse1$ion8<-meuse1$zinc
meuse1$ion9<-meuse1$cadmium
meuse1$ion10<-meuse1$copper
meuse1$ion11<-meuse1$lead
meuse1$ion12<-meuse1$zinc

coordinates(meuse1) <- ~x+y

test<-meuse1[,1:16]


Donner la position de chacune des cartes dans split devient rapidement fastidieux. J'aimerais pouvoir intégrer les paramètres de positionnement dans la boucle pour simplifier la production/visualisation des cartes.

J'ai commencé à regarder la doc sur print.trellis, j'ai trouvé une note indiquant:
Citation:
Unlike S-PLUS, trying to position a multipage display (using position and/or split) will mess things up.

Je pense que ca s'annonce un peu tendu pour ce que je cherche à faire.

Mais dans les exemples donnés dans l'aide j'ai trouvé ça:
Code:
library(RXshrink)
data(longley2)

## repeat same plot, with different polynomial fits in each panel
xyplot(Armed.Forces ~ Year, longley, index.cond = list(rep(1, 6)),
       layout = c(3, 2),
       panel = function(x, y, ...)
       {
         panel.xyplot(x, y, ...)
         fm <- lm(y ~ poly(x, panel.number()))
         llines(x, predict(fm))
       })


Je pense que panel= function (x,y,...) pourrait bien être un début de solution. Je vais essayer de l'appliquer à mes données, je vous tiens au courant de mes avancées quand j'ai quelque chose qui tient la route.

PS: j'ai vu votre post sur les Graphiques Trellis, je vais également regarder tout ça avec attention.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Renaud Lancelot



Inscrit le: 16 Déc 2004
Messages: 2329
Localisation: CIRAD, Montpellier

MessagePosté le: Mer Mai 09, 2012 11:41 am    Sujet du message: Répondre en citant

Sans doute: bubble est construit sur xyplot.

Code:
> library(sp)
> bubble
function (obj, zcol = 1, ..., fill = TRUE, maxsize = 3, do.sqrt = TRUE,
    pch, col = c(2, 3), key.entries = quantile(data[, zcol]),
    main = ifelse(is.numeric(zcol), names(data)[zcol], zcol),
    identify = FALSE, labels = row.names(data.frame(obj)), key.space = "right",
    scales = list(draw = FALSE), xlab = NULL, ylab = NULL, panel = panel.bubble,
    sp.layout = NULL)
{
    obj = as(obj, "SpatialPointsDataFrame")
    data = as.data.frame(obj)
    cc = coordinates(obj)
    x = cc[, 1]
    y = cc[, 2]
    if (NCOL(data) == 1)
        z = data
    else if (NCOL(data) == 0)
        z = rep(1, NROW(cc))
    else z = data[, zcol]
    if (missing(pch))
        pch = ifelse(fill, 16, 1)
    if (length(col) == 1)
        col = rep(col, 2)
    z.col = as.vector(ifelse(z < 0, col[1], col[2]))
    q = key.entries
    q.pch = rep(pch, length(q))
    q.text = as.character(round(q, 3))
    q.col = as.vector(ifelse(q < 0, col[1], col[2]))
    az = abs(z)
    q = abs(q)
    if (do.sqrt) {
        az = sqrt(az)
        q = sqrt(q)
    }
    cex = as.vector(maxsize * az/max(az, q))
    q.cex = as.vector(maxsize * q/max(az, q))
    if (identify) {
        plot(x, y, asp = 1, cex = cex, main = main, ...)
        return(identify(x, y, labels))
    }
    else {
        key = list(space = key.space, points = list(pch = q.pch,
            col = q.col, cex = q.cex), text = list(q.text))
        xyplot(y ~ x, col = z.col, cex = cex, pch = pch, asp = mapasp(obj),
            key = key, main = main, scales = scales, xlab = xlab,
            ylab = ylab, panel = panel, sp.layout = sp.layout,
            ...)
    }
}
<environment: namespace:sp>
>

_________________
Renaud
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Gaspard CHARRIER



Inscrit le: 21 Mai 2011
Messages: 4
Localisation: Paris

MessagePosté le: Jeu Mai 10, 2012 8:09 am    Sujet du message: Répondre en citant

Bonjour,

Je n'arrive pas à sortir quoique ce soit d'intéressant avec panel. J'ai essayer des choses comme:

Code:
for (i in 1:4)
{ carte<-bubble(test,zcol=i,fill=TRUE,maxsize=2,do.sqrt=TRUE,col=2)
}


print(carte, index.cond = list(rep(1,4)),
      layout = c(2, 2),
      panel = function(x, y, ...)
      {
        bubble.plot(x,y,...)
      })


Mais j'ai des messages d'erreur du type:
Citation:
Error in plot.trellis(carte, index.cond = list(rep(1, 4)), layout = c(2, :
argument 4 matches multiple formal arguments


Il y a quelque chose qui m'échappe, mais je n'arrive pas à comprendre quoi...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Renaud Lancelot



Inscrit le: 16 Déc 2004
Messages: 2329
Localisation: CIRAD, Montpellier

MessagePosté le: Jeu Mai 10, 2012 1:24 pm    Sujet du message: Répondre en citant

Il faut repartir directement de xyplot, et définir une fct panel correspondant à vos besoins. Vous devriez lire la doc et regarder les liens indiqués dans http://forums.cirad.fr/logiciel-R/viewtopic.php?t=440
_________________
Renaud
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Groupe des utilisateurs du logiciel R Index du Forum -> Questions en cours Toutes les heures sont au format GMT
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous pouvez éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots
Inscriptions bloqués / messages: 48021 / 588