2 votes

Ajouter un nouveau tracé avec des limites dans ggplot

J'ai ces données :

dt1 <- structure(list(yr = 2004:2010, X = c(0.637, 0.9701, 0.701, 0.4535, 0.5058, 0.4698, 0.6228), lower = c(0.4254, 0.6442, 0.4699, 0.2929, 0.3311, 0.3213, 0.4276), upper = c(0.8614, 1.32, 0.955, 0.6261, 0.6901, 0.6276, 0.8385)), .Names = c("yr", "X", "lower", "upper"), row.names = 50:56, class = "data.frame")

dt2 <- structure(list(yr = 2004:2010, X = c(0.1753, 0.2872, 0.3038, 0.1994, 0.2486, 0.235, 0.2604), lower = c(0.1059, 0.1747, 0.1879, 0.1174, 0.1542, 0.1507, 0.1704), upper = c(0.2554, 0.4121, 0.4319, 0.2876, 0.3542, 0.3222, 0.3588)), .Names = c("yr", "X", "lower", "upper"), row.names = 8:14, class = "data.frame")

Et je peux utiliser ggplot comme ceci :

ggplot(dt1, aes(x=yr, y=X, group=1, ymin = lower, ymax = upper)) +
    geom_ribbon(alpha = 0.2) +
    geom_line() +
    geom_point(shape=21, size=3, fill="blue") +
    theme_gray(12) +
    opts(panel.background = theme_rect(fill='grey80')) +
    ylim(0,1.7)

enter image description here

...et de même pour dt2 : enter image description here

Je voudrais maintenant afficher les deux tracés sur le même graphique. Comment puis-je le faire ?

4voto

sztup Points 225

J'ajouterais une nouvelle variable ("dt") aux deux cadres de données (basée sur le nom des cadres de données originaux), puis je les relierais dans un nouveau cadre de données (dt3).

dt1[,"dt"]<-"dt1"  
dt2[,"dt"]<-"dt2"  
dt3<-rbind(dt1,dt2)  
dt3  
  >   yr      X  lower  upper  dt  
50 2004 0.6370 0.4254 0.8614 dt1  
51 2005 0.9701 0.6442 1.3200 dt1  
52 2006 0.7010 0.4699 0.9550 dt1  
53 2007 0.4535 0.2929 0.6261 dt1  
54 2008 0.5058 0.3311 0.6901 dt1  
55 2009 0.4698 0.3213 0.6276 dt1  
56 2010 0.6228 0.4276 0.8385 dt1  
8  2004 0.1753 0.1059 0.2554 dt2  
9  2005 0.2872 0.1747 0.4121 dt2  
10 2006 0.3038 0.1879 0.4319 dt2  
11 2007 0.1994 0.1174 0.2876 dt2  
12 2008 0.2486 0.1542 0.3542 dt2  
13 2009 0.2350 0.1507 0.3222 dt2  
14 2010 0.2604 0.1704 0.3588 dt2  

Pour ce cadre de données dt3, votre code fonctionne bien avec le groupe modifié par le nom de la nouvelle variable.

ggplot(dt3, aes(x=yr, y=X, group=dt, ymin = lower, ymax = upper)) +  
     geom_ribbon(alpha = 0.2) +  
     geom_line() +  
     geom_point(shape=21, size=3, fill="blue") +  
     theme_gray(12) +  
     opts(panel.background = theme_rect(fill='grey80')) +  
     ylim(0,1.7)  

Pour changer la couleur des points et des lignes (ajouté : color=dt, linetype=0, modifié : au lieu de fill="blue" : aes(fill=dt)). Les deux dernières lignes servent à personnaliser les couleurs.

myplot<-ggplot(dt3, aes(x=yr, y=X, group=dt, colour=dt,ymin = lower, ymax = upper)) +  
geom_ribbon(alpha = 0.2, linetype=0)+ geom_line() +  
geom_point(shape=21, size=3, aes(fill=dt)) +  
theme_gray(12) +  
opts(panel.background = theme_rect(fill='grey80')) +  
ylim(0,1.7)  
myplot<-myplot+ scale_color_manual(values=c("red", "blue"))  
myplot<-myplot+ scale_fill_manual(values=c("red", "blue"))  
myplot  

enter image description here

3voto

Joe King Points 502

J'ai trouvé cette réponse par essai et erreur :

ggplot(dt1, aes(x=yr, y=X, group=1, ymin = lower, ymax = upper)) +
    geom_ribbon(alpha = 0.2) +
    geom_line() +
    geom_point(shape=21, size=3, fill="blue") +
    theme_gray(12) +
    opts(panel.background = theme_rect(fill='grey80')) +
    ylim(0,1.7) +
    geom_path(aes(x=yr, y=X, group=1, ymin = lower, ymax = upper), data=dt2) +
    geom_ribbon(alpha = 0.2, data=dt_inh) +
    geom_point(shape=21, size=3, fill="red", data=dt2)

enter image description here

Est-ce une bonne façon de procéder ?

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