J'ai le problème suivant: Je veux créer un graphique en utilisant ggplot, montrant la relation entre deux variables (Quantification microplastique dans les moules, notée MP et Lipofuscinaccumulation dénommée Lip) de traitement différent groupes et indépendance du temps d'exposition.Comment gérer 4 paramètres différents dans ggplot
Mes données ressemblent à ceci:
Et voici mon code:
ggplot(Catrv_all,aes(Lip,MP,color=treatment))+
geom_smooth(method="lm", se=FALSE)+
geom_point(size = 2)+
theme(legend.position = "bottom")+
theme(plot.title = element_text(hjust = 0.5))+
labs(x = "Lipofuscin accumulation [% area]",
y = "Microplastic quantification [% area]",
title = "Lipofuscin accumulation vs. Microplastic quantification")
L'intrigue ressemble à ceci:
Je reconnu que ggplot évidemment n'a pas ordonné la Valeurs correctes pour l'exposition Temps car les valeurs sont en désaccord (cela ne commence par exemple pas avec la valeur pour 0 h).
Ma question est: comment puis-je dire à ggplot de réorganiser les valeurs pour MP et Lip dans le bon ordre en termes d'exposition Time? Dois-je créer des deuxièmes axes x? Si oui, comment puis-je faire ça dans ggplot?
J'ai vu beaucoup de discussions dans SO, qu'il est difficile de créer un deuxième axe x/y dans ggplot, mais je ne sais pas comment je devrais visualiser mes données d'une autre manière.
Mise à jour pour ma question: je tenir compte des conseils de sconfluentus et a trouvé une réponse très intéressante de Ben Bolker dans le poste suivant: How can I plot with 2 different y-axes?
J'adapté le code fourni:
## add extra space to right margin of plot within frame
par(mar=c(5, 4, 4, 6) + 0.1)
## split data set for treatment groups
MP_Ko<-Catrv_all$MP[1:8]
exp<-Catrv_all$expTime[1:8]
Lip_Ko<-Catrv_all$Lip[1:8]
## Plot first set of data and draw its axis
plot(exp, MP_Ko, pch=16, axes=FALSE, xlab="", ylab="",
type="b",col="black", main="Microplastic quantification vs. Lipofuscin accumulation in Controls")
axis(2,col="black",las=1) ## las=1 makes horizontal labels
mtext("Microplastic quantification [% area]",side=2,line=2.5)
box()
## Allow a second plot on the same graph
par(new=TRUE)
## Plot the second plot and put axis scale on right
plot(exp,Lip_Ko, pch=15, xlab="", ylab="",
axes=FALSE, type="b", col="red")
## a little farther out (line=4) to make room for labels
mtext("Lipofuscin accumulation [% area]",side=4,col="red",line=4)
axis(4, col="red",col.axis="red",las=1)
## Draw the time axis
axis(1,pretty(range(Catrv_all$expTime, 672)))
mtext("Time (Hours)",side=1,col="black",line=2.5)
## Add Legend
legend("topright",legend=c("Microplastic quantification","Lipofuscin accumulation"),
text.col=c("black","red"),pch=c(16,15),col=c("black","red"))
... et a obtenu l'intrigue suivante: enter image description here
Cela prend beaucoup de temps, mais cette approche a été très utile.
Veuillez coller vos données au format texte et non image. – zx8754
Que voulez-vous dire exactement quand vous dites "ordonner les valeurs correctement pour le temps d'exposition"? Votre intrigue n'inclut pas le temps d'exposition de quelque manière que ce soit. Vous pouvez également utiliser 'dput (Catrv_all)' et copier/coller la sortie pour rendre vos données disponibles pour la communauté. – brettljausn
Les variables assignées à l'axe x/y (MP & Lip) semblent être numériques, il est donc logique que les points soient ordonnés en fonction des valeurs MP/Lip croissantes.Si vous voulez commander par temps d'exposition, voulez-vous dire que vous voulez affecter expTime à l'axe des x à la place? Veuillez inclure une illustration de votre sortie désirée. Cela rendrait plus facile pour les autres de comprendre vos besoins. –