web-dev-qa-db-fra.com

Terrain d'interaction dans ggplot2

J'essaie de faire un complot d'interaction avec ggplot2. Mon code est ci-dessous:

library(ggplot2)
p <- qplot(as.factor(dose), len, data=ToothGrowth, geom = "boxplot", color = supp) + theme_bw()
p <- p + labs(x="Dose", y="Response")
p <- p + stat_summary(fun.y = mean, geom = "point", color = "blue")
p <- p + stat_summary(fun.y = mean, geom = "line", aes(group = 1))
p <- p  + opts(axis.title.x = theme_text(size = 12, hjust = 0.54, vjust = 0))
p <- p  + opts(axis.title.y = theme_text(size = 12, angle = 90,  vjust = 0.25))
print(p)

Comment puis-je tracer des moyens de combinaison de niveau de dose-suppp plutôt que le seul niveau de dose signifie que je suis ici? Merci d'avance pour votre aide.

enter image description here

21
MYaseen208

Vous pouvez précalculer les valeurs dans leur propre cadre de données:

toothInt <- ddply(ToothGrowth,.(dose,supp),summarise, val = mean(len))

ggplot(ToothGrowth, aes(x = factor(dose), y = len, colour = supp)) + 
    geom_boxplot() + 
    geom_point(data = toothInt, aes(y = val)) +
    geom_line(data = toothInt, aes(y = val, group = supp)) + 
    theme_bw()

enter image description here

Notez que l'utilisation ggplot plutôt que qplot rend la construction graphique beaucoup plus claire pour des parcelles plus complexes telles que celles-ci (IMHO).

31
joran

Si vous pensez avoir besoin d'une approche plus générale, vous pouvez essayer la fonction Rxnnorm dans le package Handystuff (Github.com/bryanhanson/handystuff). Disclaimer: Je suis l'auteur. Disclaimer n ° 2: L'option de tracé de la boîte ne fonctionne pas assez bien, mais toutes les autres options vont bien.

Voici un exemple utilisant les données à la denthe:

p <- rxnNorm(data = ToothGrowth, res = "len", fac1 = "dose", fac2 = "supp", freckles = TRUE, method = "iqr", fac2cols = c("red", "green"))
print(p)

rxnNorm Demo

7
Bryan Hanson

beaucoup plus facile. sans diverse. directement avec ggplot2.

ggplot(ToothGrowth, aes(x = factor(dose) , y=len , group = supp, color = supp)) + 
  geom_boxplot() +
  geom_smooth(method = lm, se=F) +
  xlab("dose") +
  ylab("len")
1
Junbo Huang