110 votes

grouper par deux colonnes dans ggplot2

Est-il possible de regrouper par deux colonnes ? Ainsi le produit en croix est tiré par geom_point() y geom_smooth() ?

Par exemple :

frame <- data.frame(
 series <- rep(c('a', 'b'), 6), 
 sample <- rep(c('glass','water', 'metal'), 4), 
 data <- c(1:12))

ggplot(frame, aes()) # ...

De sorte que les points 6 y 12 partager un groupe, mais pas avec 3 .

205voto

Blue Magister Points 11921

En prenant l'exemple de cette question en utilisant interaction pour combiner deux colonnes en un nouveau facteur :

# Data frame with two continuous variables and two factors 
set.seed(0)
x <- rep(1:10, 4)
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5)
treatment <- gl(2, 20, 40, labels=letters[1:2])
replicate <- gl(2, 10, 40)
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate)

ggplot(d, aes(x=x, y=y, colour=treatment, shape = replicate,
  group=interaction(treatment, replicate))) + 
  geom_point() + geom_line()

ggplot example

65voto

Par exemple :

 qplot(round, price, data=firm, group=id, color=id, geom='line') +  
      geom_smooth(aes(group=interaction(size, type)))

38voto

joran Points 68079

Pourquoi ne pas simplement paste ces deux colonnes ensemble et utiliser que variable en tant que groupes ?

frame$grp <- paste(frame[,1],frame[,2])

Une manière un peu plus formelle de le faire serait d'utiliser la fonction interaction .

30 votes

Je pense que vous ne devriez pas modifier votre data.frame pour les besoins d'un complot. Le site plot devrait tracer votre df et non l'inverse.

4 votes

Je suis d'accord, la réponse de Blue Magister est meilleure.

8 votes

@clemlaflemme Je pense que la réponse de BlueMagister est bonne, même si je pense que la distinction dans ce cas est assez mineure. Mais la position générale selon laquelle il ne faut pas modifier son cadre de données pour un graphique est curieuse étant donné votre choix d'utiliser ggplot2 dont la conception repose entièrement sur la structuration explicite de vos données pour fonctionner avec la sémantique de ggplot.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X