Dotplot et etiquette des points

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

Philippe Guillet
Messages : 4
Enregistré le : 24 Mar 2007, 07:04

Dotplot et etiquette des points

Messagepar Philippe Guillet » 29 Mar 2007, 19:39

Question de débutant:
Est il possible d'attribuer une étiquette à chaque point d'un dotplot?
Merci!

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

Messagepar Renaud Lancelot » 30 Mar 2007, 06:04

Oui.

Code : Tout sélectionner

library(lattice)

Data <- data.frame(
  y = factor(LETTERS[1:5]),
  x = runif(5),
  label = c("banane", "orange", "poire", "pomme", "citron"))

dotplot(y ~ x, data = Data,
  panel = function(x, y){
    panel.dotplot(x, y)
    Y <- as.numeric(y)
    ltext(x, Y, label = Data$label, adj = c(.5, -1))
    })


Mais est-ce bien nécessaire ? Les étiquettes des points sont déjà sur l'axe des y.

Renaud

Philippe Guillet
Messages : 4
Enregistré le : 24 Mar 2007, 07:04

Messagepar Philippe Guillet » 31 Mar 2007, 07:16

Merci Renaud pour cette réponse très rapide.
En fait j'ai un fichier de données de la forme suivante:

Code : Tout sélectionner

projet;sousprojet;activite;date;type
Projet 1;Sous Projet 1;Sous Projet 1 A1;1;Type 1
Projet 1;Sous Projet 2;Sous Projet 2 A1;2;Type 1
Projet1;Sous Projet 2;Sous Projet 2 A2;3;Type 2
Projet 1;Sous Projet 3;Sous Projet 3 A1;4;Type 3

Je souhaite donc avoir les étiquettes correspondant à "actitivite" afin d'explorer mes données en relation les unes avec les autres et voir si la "concordance de temps" est bonne.
Mon code est le suivant:

Code : Tout sélectionner

library(lattice)
Data<-read.csv2("test0.csv",header=T)
attach(Data)
x=date
y=projet

 print(
        dotplot(y~x,
        data=Data,
        groups=type,
        auto.key=T,
        main="Essai",
        xlab=NULL,
        pch=16,
        panel = function(x, y,groups){
                panel.dotplot(x, y)
                ltext(x,y, label = Data$activite, adj = c(-0.1, 0.1),srt=45)},
        )
        )

Il marche bien, mais ne m'affiche pas les "types" de couleur différentes. Peut on le faire?
Merci encore pour votre aide très précieuse.
Philippe

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

Messagepar Renaud Lancelot » 31 Mar 2007, 10:30

1. Pas la peine d'attacher le data.frame, mais si vous le faites, il ne faut pas oublier de le détacher (detach()).

2. Pas le peine d'affecter les variables utilisées dans le dotplot.

3. Pas la peine d'imprimer la graphe explicitement (avec cette utilisation)

4. Je ne comprends pas bien vos données: la structure du fichier que vous donnez en exemple ne correspond pas au code du graphe que vous indiquez plus loin. Je ne suis pas sûr qu'un dotplot soit pertinent dans ce cas.

Néanmoins, si c'est bien le cas, il faut que vous indiquiez à la fct ltext à quel groupe correspond l'étiquette. Une possibilité est d'utiliser une boucle for:

Code : Tout sélectionner

library(lattice)
Data <- read.csv2("test0.csv", header = TRUE)

dotplot(projet ~ date, data = Data, groups = type,
   auto.key = TRUE,
   main = "Essai", xlab = NULL,
   panel = function(x, y, groups){
     panel.dotplot(x, y, pch = 16, ...)
     for(i in seq(length(levels(Data$type)))){
       xtype <- levels(Data$type)[i]
       cond <- Data$type == xtype
       ltext(x[cond], y[cond], label = xtype, adj = c(-0.1, 0.1), srt = 45)
       }
     })


Sans garantie...

Renaud

Philippe Guillet
Messages : 4
Enregistré le : 24 Mar 2007, 07:04

Messagepar Philippe Guillet » 31 Mar 2007, 12:59

3. Pas la peine d'imprimer la graphe explicitement (avec cette utilisation)

Ben, si je ne fais pas Print(...) le plot n'apparait pas!
Bon en fait cela ne marche pas fort, je n'arrive pas aà avoir les couleurs par activité.
Mais cela n'est pas grave j'ai les infos dont j'ai besoin.
Un grand merci

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

Messagepar Renaud Lancelot » 31 Mar 2007, 15:49

print est nécessaire si le graphe est généré dans une boucle ou une fonction:

Code : Tout sélectionner

for(i in 1:2)
  xyplot(1 ~ 1)

ne "marche" pas.

Renaud

Philippe Guillet
Messages : 4
Enregistré le : 24 Mar 2007, 07:04

Messagepar Philippe Guillet » 31 Mar 2007, 18:14

En fait, si j'utilise la console R, il n'y a pas besoin d'utiliser la commande PRINT. En revanche, si j'edite les fichiers avec Tinn-R, il faut mettre la commande PRINT, sinon, bien que le fichier soit envoyé à R, le graphique ne s'affiche pas....


Retourner vers « Questions en cours »

Qui est en ligne

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