2017-10-20 22 views
0

J'essaye d'inverser l'axe X secondaire au-dessus de mon ggplot.ggplot2: Inverser l'axe x secondaire continu

ggplot(
    data=MasterTable, aes(x=Concentration, y=Signal, color=factor(Assay))) + 
    scale_x_continuous("Chemical 1", 
        sec.axis = sec_axis(~ . *1, name = "Chemical 2"), scale_x_reverse(limits=c(400,0))) 

Si vous supprimez la dernière section du code (scale_x_reverse ...) il fait un terrain avec un secondaire qui est identique à l'axe inférieur de X. J'ai réussi à inverser l'axe du bas, mais cela inverse également l'axe supérieur. Je cherche à inverser seulement l'axe supérieur.

Toute aide à ce sujet serait grandement appréciée.

Merci!

enter image description here

+1

S'il vous plaît donner un exemple reproductible (y compris des données.). – Prradep

Répondre

2

Voici une solution possibile:

MasterTable <- data.frame(Concentration=rep(c(0,50,100,200,300, 350, 400),2), 
Signal=c(11800,13000,12000,12000,16000,15500,15570,11600,11700,8000,8000,6000,4000,3000), 
Assay=rep(1:2,each=7)) 

library(ggplot2) 
# Reverse Signal vector of the blue series (for Assay =1) 
MasterTable$Signal[MasterTable$Assay==1] <- rev(MasterTable$Signal[MasterTable$Assay==1]) 

ggplot(data=MasterTable, aes(x=Concentration, y=Signal, color=factor(Assay))) + 
geom_line(lwd=1) + geom_point(size=3) + guides(color='none') + 
scale_x_continuous('Chemical 1 (nM)', trans='reverse', 
        sec.axis = sec_axis(~ 400 - . , name='Chemical 2 (nM)')) 

enter image description here

+0

Cela fonctionne très bien! Je vous remercie! Pour récapituler, inversez l'axe du bas et soustrayez l'axe supérieur par la valeur la plus élevée de votre axe inférieur. – Marty999

+0

@ Marty999 Oui! La soustraction est nécessaire pour éviter d'inverser le second axe. –