J'ai deux graphiques et j'essaie de superposer l'un sur l'autre:
Un exemple de la trame de données "ge" ressemble à ceci. En réalité, il y a 10 gènes avec 200 échantillons chacun, donc il y a 2000 lignes et 3 colonnes:
Exp Gene Sample
903.0 1 1
1060.0 1 2
786.0 1 3
736.0 1 4
649.0 2 1
657.0 2 2
733.5 2 3
774.0 2 4
Un exemple de la trame de données "avg" ressemble à ceci. Il s'agit d'une moyenne des points de données pour chaque gène dans tous les échantillons. En réalité, ce graphique a 10 gènes, donc la matrice est de 4col X 10 lignes:
mean Gene sd se
684.2034 1 102.7142 7.191435
723.2892 2 100.6102 7.044122
Le premier graphique représente une ligne de l'expression moyenne pour chaque gène ainsi que l'écart type pour chaque point de données.
avggraph <- ggplot(avg, aes(x=Gene, y=mean)) + geom_point() +geom_line() + geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1)
Le deuxième graphique représente l'expression des gènes sous la forme d'une ligne pour chaque échantillon à travers tous les gènes.
linegraphs <- ggplot(ge, aes(x=Gene, y=Expression, group=Samples, colour="#000099")) + geom_line() + scale_x_discrete(limits=flevels.tge)
Je voudrais superposer avggraph au-dessus de linegraphs. Y a-t-il un moyen de faire cela? J'ai essayé avggraph + linegraphs mais je reçois une erreur. Je pense que c'est parce que les graphiques sont générés par deux trames de données différentes.
Je dois également souligner que les axes des deux graphiques sont identiques. Les deux graphiques ont les gènes sur l'axe X et l'expression des gènes sur l'axe Y.
Toute aide serait grandement appréciée!
Une façon consiste à ajouter la commande geom_line
Pour le deuxième tracé au premier tracé. Vous devez dire à ggplot
que ce geom est basé sur un ensemble de données différent:
ggplot(avg, aes(x=Gene, y=mean)) +
geom_point() +
geom_line() +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1) +
geom_line(data = ge, aes(x=Gene, y=Exp, group=Sample, colour="#000099"),
show_guide = FALSE)
La dernière commande geom_line
Sert à créer les lignes à partir des données brutes.
La solution de contournement que j'ai trouvée était qu'au lieu de fusionner les deux tracés, j'ai fusionné les données. J'ai ajouté une colonne supplémentaire à la fin des deux trames de données, puis j'ai effectué l'opération rbind
sur celles-ci en utilisant l'esthétique fill
ou color
pour séparer les deux tracés. Bien sûr, dans mon cas, l'échelle utilisée pour l'axe devait être la même.