GGPlot geom_line augmenter le trait des lignes qui se superposent

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

Luca Niang
Messages : 26
Enregistré le : 01 Avr 2012, 10:41

GGPlot geom_line augmenter le trait des lignes qui se superposent

Messagepar Luca Niang » 26 Jan 2023, 13:34

J'ai une question qui semble assez siple mais je ne trouve pas la réponse sur internet

Voici un exemple reproductible

Je fais un graphique avec des lignes qui se superposent :

Code : Tout sélectionner

df <- data.frame (idilot  = c("1","1","1","2","2","2","3","3","3","4","4","4"),
                  series = c("2009","2011","2012","2009","2011","2012","2009","2011","2012","2009","2011","2012"),
                  value = c("0","0","0","0","0","2","3","3","2","0","0","0"))
df[,2]=as.integer(df[,2])
df[,3]=as.integer(df[,3])
#create line plot for each column in data frame
ggplot(df, aes(x=series,y=value,group=idilot)) + geom_line()



Comment faire pour augmenter le trait en fonction du nombre de courbes qui se trouvent dessous ?
Par ailleurs, cet exemple n'est que purement fictif, car le résultat de mon jeu de données ressemble à ça,

et dans l'idéal, j'aimerais aboutir à des variations de couleur comme on voit sur ces exemples https://r-graph-gallery.com/2d-density-chart.html mais sur mes lignes et pas sur les points

Quelqu'un aurait une idée ?

Image

Merci !

Maxime Deniaux
Messages : 68
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: GGPlot geom_line augmenter le trait des lignes qui se superposent

Messagepar Maxime Deniaux » 26 Jan 2023, 14:39

Salut,

j'avoue que c'est la première fois que je vois une demande de ce type, et visiblement il ne doit pas y avoir grand chose sur internet si tu n'as pas trouvé (du coup je n'ai pas cherché non plus). Je connais pas trop les packages dans les concept de séries temporelles donc je ne saurais pas dire s'il existe quelque chose qui se rapproche de ce que tu demandes.

D'un pdv manuel (sans package), je dirais qu'il faudrait peut-être partir sur la création d'une variable supplémentaire qui te dit si au temps (series) t et t+1 les valeurs sont identiques et combien de groupe (idilot) cela concerne s'il y a valeurs identiques trouvées.

En 2011, idilot 2 et 3 sont respectivement à 0 et 3, puis 2012 ils sont à 2,donc il n'y a pas superposition.

A contrario, 2009 à 2011, il y a superposition de 3 idilot (1,2 et 4), donc la nouvelle variable prendrait la valeur 3 par exemple sur 2009 pour ces 3 groupes. Quelle valeur pour ces 3 groupes en 2011? On regarde entre 2011 et 2012 : 0 pour groupe 1 et 4, mais 2 pour groupe 2. Donc groupe 1 et 4 pourrait prendre la valeur 2 tandis que groupe 2 pourrait prendre la valeur 1 (idem pour groupe 3).

Je sais pas si je m'exprime bien, c'est un peu laborieux.

Ensuite dans ton ggplot, ajouter une option size pour le geom_line en fonction de la valeur de la variable créée juste avant?

Dans l'exemple ça pourrait donner quelque chose comme ça :

Code : Tout sélectionner

df$size = c(3,3,1,3, 2,1,1,2, 2,1,1,2)

ggplot(df, aes(x=series,y=value,group=idilot)) + geom_line(aes(size = size))


Les 4 dernières valeurs servent un peu à rien dans l'exemple, puisqu'on regarde à t et t+1 si on suit ce que je dis. J'ai mis (2,1,1,2) mais en réalité ça aurait dépendu de l'année suivante.

Pas super donc, mais je n'ai pas trop d'idées qui me viennent à l'esprit.

Bref, à voir si certaines personnes ont d'autres idées :)

Bonne fin de journée

Luca Niang
Messages : 26
Enregistré le : 01 Avr 2012, 10:41

Re: GGPlot geom_line augmenter le trait des lignes qui se superposent

Messagepar Luca Niang » 26 Jan 2023, 15:05

Si si Maxime c'est très clair,

J'ai une idée de l'algo avec ce que tu dis, il faudrait raisonner par groupe de 2 valeurs continues (2009-2011 ; 2011-2012 ; 2012-2013) et regarder lorsque les valeurs sont les mêmes pour 2009 et 2011

par exemple, si on trouve

ilot 1 2009, valeur à 2
ilot 1 2011, valeur à 3
il faut convertir ça en (2009-2011 ; 2->3)

ilot 2 2009, valeur à 2
ilot 2 2011, valeur à 3
il faut convertir ça en (2009-2011 ; 2->3)

et il faudrait sommer in fine, tous les 2009-2011 ; 2 -> 3, et remplir le champ size à 2 pour ce segment


(dans l'absolu, j'aurais préféré qu'un package existe mais en tout cas j'ai une idée de comment faire je vais essayer, si j'y arrive je mettrai la solution sur le forum bien entendu)

Luca Niang
Messages : 26
Enregistré le : 01 Avr 2012, 10:41

Re: GGPlot geom_line augmenter le trait des lignes qui se superposent

Messagepar Luca Niang » 26 Jan 2023, 15:12

Déjà la preière étape n'est pas une mince affaire, à savoir
Etape 1 : Convertir :

idilot series value
1 2009 0
1 2011 0
1 2012 0
2 2009 0
2 2011 0
2 2012 2
3 2009 3
3 2011 3
3 2012 2
4 2009 0
4 2011 0
4 2012 0

en :

idilot annee_debut annee_fin valeur_debut valeur_fin
1 2009 2011 0 0
1 2011 2012 0 0
2 2009 2011 0 0
...

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

Re: GGPlot geom_line augmenter le trait des lignes qui se superposent

Messagepar Logez Maxime » 27 Jan 2023, 09:55

Bonjour,

Pour ce qui est d'estimer des densités ça va être tout de suite plus compliqué.
Tu peux faire un premier test assez simple, en jouant sur la transparence alpha = 0.x dans ton geom_line.
Normalement plus tes lignes vont se recouvrir et plus elles vont se foncer.

A voir.
Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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