condition dans dataframe pour ggplot

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

Julien Demeaux
Messages : 17
Enregistré le : 23 Oct 2017, 22:24

condition dans dataframe pour ggplot

Messagepar Julien Demeaux » 27 Nov 2017, 00:59

Bonjour,

J'ai créé un df nommé pos à partir de données

Voici les 1ères lignes du print(pos), le df a 342 observations.

Code : Tout sélectionner

                  player           x         y       xGtir goal chances
56             E. Zahavi   2.0833333  61.31250 0.116980839   25     144
97                  Hulk  -4.9206349  82.07937 0.059886801   12     126
215      Ricardo Goulart   1.3823529  57.50980 0.112684664   14     102
13        Alexandre Pato  12.0957447  66.24468 0.112711070   13      94
182           N. Jelavic  -0.1444444  49.63333 0.147727388   13      90
270               Wu Lei   6.9411765  41.54118 0.149473686   20      85
189            O. Ighalo   1.0238095  46.91667 0.154722878   13      84
230              Soriano  -0.5200000  64.76000 0.102129815    9      75
11           Alan Kardec  -3.3972603  47.71233 0.114689330    9      73

Quand je veux plotter les variables x et y en ajoutant la condition "chances >69" j'ai systématiquement l'intégralité des observations qui sont plotées.
Voici ce que je code

Code : Tout sélectionner

with(subset(pos, chances>69), ggplot(pos, aes(x= y, y=x))+geom_point())

Quelqu'un peut m'aiguiller pour trouver d'où vient mon problème svp ?
Merci !

Mickael Canouil
Messages : 316
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: condition dans dataframe pour ggplot

Messagepar Mickael Canouil » 27 Nov 2017, 09:25

Bonjour,

Nullement besoin d'utiliser "with", le code suivant devrait fonctionner simplement.

Code : Tout sélectionner

ggplot(data = subset(pos, chances>69), aes(x= y, y=x))+geom_point())


PS: "aes()" évaluer les arguments et les recherches dans data, comme si celui-ci était un environnement. En résumé, son comportement est similaire au "with()"

Cordialement,
Mickaël

Julien Demeaux
Messages : 17
Enregistré le : 23 Oct 2017, 22:24

Re: condition dans dataframe pour ggplot

Messagepar Julien Demeaux » 28 Nov 2017, 03:48

Bonjour Mickael,
Merci pour votre retour.
Malheureusement même en remplaçant ma ligne de code par la vôtre, mon plot sort avec l'intégralité des observations.

Mickael Canouil
Messages : 316
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: condition dans dataframe pour ggplot

Messagepar Mickael Canouil » 28 Nov 2017, 10:18

Bonjour,

si je me réfère à votre extrait, c'est normal puis-qu’aucune des valeurs de "chances" n'est inférieure à 69.
Il ne s'agit plus d'un problème de code, mais de votre choix de valeur de filtre, que je vous suggère de vérifier ("range(pos[,"chance"])")

Code : Tout sélectionner

pos <- structure(list(player = structure(c(3L, 4L, 7L, 2L, 5L, 9L, 6L,
8L, 1L), .Label = c("Alan Kardec", "Alexandre Pato", "E. Zahavi",
"Hulk", "N. Jelavic", "O. Ighalo", "Ricardo Goulart", "Soriano",
"Wu Lei"), class = "factor"), x = c(2.0833333, -4.9206349, 1.3823529,
12.0957447, -0.1444444, 6.9411765, 1.0238095, -0.52, -3.3972603
), y = c(61.3125, 82.07937, 57.5098, 66.24468, 49.63333, 41.54118,
46.91667, 64.76, 47.71233), xGtir = c(0.116980839, 0.059886801,
0.112684664, 0.11271107, 0.147727388, 0.149473686, 0.154722878,
0.102129815, 0.11468933), goal = c(25L, 12L, 14L, 13L, 13L, 20L,
13L, 9L, 9L), chances = c(144L, 126L, 102L, 94L, 90L, 85L, 84L,
75L, 73L)), .Names = c("player", "x", "y", "xGtir", "goal", "chances"
), class = "data.frame", row.names = c(NA, -9L))

nrow(subset(pos, chances>69))==nrow(pos)

library(ggplot2)
ggplot(data = subset(pos, chances>100), aes(x= y, y=x))+geom_point()


Cordialement,
Mickaël

Julien Demeaux
Messages : 17
Enregistré le : 23 Oct 2017, 22:24

Re: condition dans dataframe pour ggplot

Messagepar Julien Demeaux » 01 Déc 2017, 03:07

J'ai 342 observations, les 13 premières ont une valeur de chances supérieure à 69.
Je n'ai copié ici que quelques obseravtions pour montrer à quoi ressemble le df.

Mickael Canouil
Messages : 316
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: condition dans dataframe pour ggplot

Messagepar Mickael Canouil » 01 Déc 2017, 16:12

Bonjour,

peut-être, mais je vous ai montré avec mon code en changeant le seuil que celui-ci fonctionne comme il se doit.
Si ce n'est pas le cas avec votre jeu de donnée, c'est pour une autre question que le code du ggplot.
Sans plus d'information sur votre jeu de donnée (fonction str par exemple), il est impossible de trouver ce qui pourrait ne pas aller.

Cordialement,
Mickaël

Julien Demeaux
Messages : 17
Enregistré le : 23 Oct 2017, 22:24

Re: condition dans dataframe pour ggplot

Messagepar Julien Demeaux » 02 Déc 2017, 00:37

Merci Mickael,

Voici ce que me retourne un str

Code : Tout sélectionner

> str(pos)
'data.frame':   342 obs. of  6 variables:
 $ player : Factor w/ 348 levels "A. Giannou","A. Ismailov",..: 57 98 219 13 186 275 193 235 11 69 ...
 $ x      : num  2.083 -4.921 1.382 12.096 -0.144 ...
 $ y      : num  61.3 82.1 57.5 66.2 49.6 ...
 $ xGtir  : num  0.117 0.0599 0.1127 0.1127 0.1477 ...
 $ goal   : num  25 12 14 13 13 20 13 9 9 7 ...
 $ chances: num  144 126 102 94 90 85 84 75 73 73 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:96] 69 70 71 72 73 74 75 331 332 333 ...
  .. ..- attr(*, "names")= chr [1:96] "71" "72" "73" "74" ...


Je vois que j'ai 348 niveaux de factors dans player, alors que j'ai 342 observations.

Mickael Canouil
Messages : 316
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: condition dans dataframe pour ggplot

Messagepar Mickael Canouil » 06 Déc 2017, 15:21

Bonjour,

a priori les types sont bons, j'en reviens donc à ma première hypothèse, que donne:

Code : Tout sélectionner

range(pos[, "chances"], na.rm = TRUE)
Mickaël


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité