Problème - Geom_line

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

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Problème - Geom_line

Messagepar Kévin Dubois » 06 Juil 2020, 14:13

Bonjour,

Je dispose d'un dataframe représentant des taux d'évolution de la population pour deux départements, ordonné de la sorte :
https://zupimages.net/viewer.php?id=20/28/z590.png

Je voudrais créer une graphique ligne qui montre le taux d'évolution pour chaque zone urbaine et chaque département sur un seul graphique. Pour cela, j'imaginais donner deux couleur différente pour mes deux lignes de département :

Code : Tout sélectionner

> ggplot(data, aes(zonage_aire_urbaine, tx_evol, col = departement)) + geom_line()


Malheureusement, un message d'erreur survient :

Code : Tout sélectionner

geom_path: Each group consists of only one observation. Do you need to adjust the
group aesthetic?


Je ne comprends pas. Comment y remédier ?

Merci.

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

Re: Problème - Geom_line

Messagepar Mickael Canouil » 06 Juil 2020, 15:03

Bonjour,

Ceci n'étant pas votre premier message, il serait bon de suivre les recommendations du forum quant au partage de donnée/code.
Au passage, il y a des balises images pour les images.

Une remarque concernant le code : "col" n'est pas une esthétique valide de ggplot2, mais R "devine" que vous voulez parler de colour ou color.
Dépendre de la façon que R a de deviner le nom des arguments n'est absolument pas recommandé.

Concernant le message d'erreur :
Conceptuellement, on trace une droite entre deux points quand il y a un lien entre ceux-ci, comme par exemple, le temps, la quantité de quelque-chose, en bref, quand l'axe est numérique.
Ici, votre abscisse est discrète, il n'est donc pas "normal" de vouloir relier des valeurs discrètes, d'où l'erreur.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Problème - Geom_line

Messagepar Logez Maxime » 06 Juil 2020, 20:15

Bonjour,

Comme l'a dit Mickaël, vouloir tracer une droite entre des catégories n'a pas forcément de sens (plutôt un diagramme en baton ?). En plus c'est trompeur parce que ça laisse supposer un sens de variation entre tes catégories, ça orientel'oeil je trouve alors que ça n'a pas lieu d'être.

Après si tu veux vraiment le faire tu peux en attribuant à chaque catégorie une abscisse et en modifiant les étiquettes de l'axe.
Un exemple :

Code : Tout sélectionner

df <- expand.grid(x=letters[1:4], dep = LETTERS[1:2])
df$z <- rpois(8, 4)

eti <- unique(df$x) # tu peux les ranger dans l'ordre que tu veux

ggplot(df, aes(match(x, eti), z, col = dep)) + geom_path() +
  xlab("zone ...") +
  scale_x_continuous(breaks = seq_along(eti), labels = unique(eti))
Cordialement,
Maxime

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

Re: Problème - Geom_line

Messagepar Mickael Canouil » 07 Juil 2020, 11:06

En dehors de l'avertissement formulé précédemment quant au fait de relier des observations discrètes et comme parfois la variable n'est pas vraiment discrète de nature, voici comment passer outre le message "Each group consists of only one observation" (solution valide pour tous les geom_*).

Il y a une chose à savoir dans ggplot2, toutes les aesthetics qui ne sont pas x ou y (sauf si x ou y est discret) , régissent la façon dont sont groupés les observations et génèrent implicitement l'aesthetic sobrement nommé group.

Ainsi, (en reprenant le jeu de données de Maxime, merci ^^), group est une combinaison de x et colour (dep).
On voit aisément, qu'en effet, cette combinaison ne contient qu'une seule et unique observation (je ne dirais pas que pour tracer une droite, il faut au moins deux points).

Code : Tout sélectionner

df <- expand.grid(= letters[1:4], dep = LETTERS[1:2])
df$z <- rpois(8, 4)
df
#>   x dep z
#> 1 a   A 8
#> 2 b   A 3
#> 3 c   A 4
#> 4 d   A 2
#> 5 a   B 4
#> 6 b   B 0
#> 7 c   B 2
#> 8 d   B 4          

Code : Tout sélectionner

library(ggplot2)
ggplot(df, aes(= x, y = z, colour = dep)) +
  geom_line() # geom_path() these two are not equivalent, see documentation
#> geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?          

Image
Si on génère group de façon explicite pour ne prendre en compte que la variable "dep"

Code : Tout sélectionner

ggplot(df, aes(= x, y = z, colour = dep, group = dep)) +
  geom_line() # geom_path() these two are not equivalent, see documentation  

Image

Ici, notez bien qu'on "triche", puisque ggplot2 transforme les variables discrètes en facteurs (si celles-ci ne sont pas déjà des facteurs) et un facteur n'est autre qu'un vecteur d'entier avec des étiquettes, soit une variable "continue".
Mickaël
mickael.canouil.fr | rlille.fr

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Re: Problème - Geom_line

Messagepar Kévin Dubois » 07 Juil 2020, 11:29

Un grand merci pour vos explications. Je prends également en compte le fait de partager des données reproductibles dans mes prochaines questions :)


Retourner vers « Questions en cours »

Qui est en ligne

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