2017-10-18 7 views
0

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: enter image description here

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: enter image description here

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.

+0

Veuillez coller vos données au format texte et non image. – zx8754

+3

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

+2

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. –

Répondre

-1

Merci à tous pour vos conseils! Je maintenant utilisé dput(Catrv_all), et est ici la sortie de mes données:

structure(list(treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), .Label = c("Co", "CoP", "HDPE"), class = "factor"), 
    expTime = c(0L, 3L, 6L, 24L, 96L, 168L, 336L, 672L, 0L, 3L, 
    6L, 24L, 96L, 168L, 336L, 672L, 0L, 3L, 6L, 24L, 96L, 168L, 
    336L, 672L), MP = c(0.056481655, 0.098508038, 0.097108112, 
    0.056848278, 0.082198187, 0.052261369, 0.022911461, 0.023901656, 
    0.056481655, 0.124866733, 0.125732967, 0.07986102, 0.071233133, 
    0.128376543, 0.331948, 0.121689155, 0.056481655, 0.186735799, 
    0.137477095, 0.41251914, 0.093364945, 0.085760245, 0.249371764, 
    0.187693319), Lip = c(9.848221569, 11.62875399, 9.530378924, 
    12.67745734, 14.14610784, 11.44140636, 11.55310567, 12.37321851, 
    9.848221569, 8.889567938, 12.5142123, 13.79770638, 11.26698845, 
    14.67064904, 14.56027915, 15.24772977, 9.848221569, 12.22424265, 
    13.05104725, 12.96830215, 12.10175574, 14.66505958, 13.67550035, 
    11.65168387), Cat = c(6.681571728, 7.321681629, 4.939885929, 
    7.73812502, 6.85066487, 9.317238053, 8.309505248, 9.33338377, 
    6.681571728, 7.517468479, 7.151607966, 9.074518192, 6.350614893, 
    9.749092742, 9.335634354, 11.43658695, 6.681571728, 6.164473371, 
    9.416062149, 9.19813927, 8.041328941, 8.736550013, 9.788258534, 
    10.55471537), CI = c(120.5252336, 110.1709456, 112.9077575, 
    110.9032308, 101.0274926, 101.1970679, 107.1464111, 97.42950278, 
    120.5252336, 101.7284063, 132.6162567, 108.7251954, 107.2199383, 
    102.9096767, 100.9637646, 101.6655302, 120.5252336, 102.1888777, 
    111.9139996, 113.7840225, 104.4767637, 103.1984161, 96.67797683, 
    95.59369834)), .Names = c("treatment", "expTime", "MP", "Lip", 
"Cat", "CI"), class = "data.frame", row.names = c(NA, -24L)) 

Espérons que cela aiderait à reconstruire mon code. Encore à ma question: oui, je voudrais montrer le temps d'exposition aussi bien sur l'un des axes (si c'est possible). Et deuxièmement, je veux montrer une sorte de "série temporelle" (de 0h à 672 h) et le comportement de MP et Lip pour tous les groupes de traitement. Donc ma première idée était: axes-y: MP, axe des x en bas: lèvre, axe des x en haut: temps d'exposition -> valeurs de tracé pour tous les groupes de traitement dans le bon ordre pour le temps d'exposition (de 0 à 672). Essayez de tracer une ligne de tendance. En fait, je veux une preuve visuelle, que le comportement de MP (au fil du temps) a conduit à des changements dans Lipofuscinaccumulation pour différents groupes de traitement.

@Jake Kaupp: Je ne suis pas sûr, comment facet_wrap dans ggplot. Pouvez-vous préciser un peu s'il vous plaît?

+0

Veuillez éditer ceci dans votre question au lieu de l'afficher en réponse. – useR