Desidero combinare due ggplots
con grid.arrange
con una sola legenda generale. Sono riuscito a combinare le due leggende con un piccolo trucco, ma poiché ho rimosso la legenda dal primo grafico, questo è più ampio dopo grid.arrange
, ovviamente. Come posso ottenere entrambe le aree di tracciamento alla stessa dimensione? E vorrei anche avere un'etichetta dell'asse x comune centrata sotto entrambi i grafici. è possibile con grid.arrange
? Lo so, a domande simili è stata data una risposta prima, ma sono ancora un novellino di R
e le soluzioni sono troppo complicate o non posso adattarle ai miei dati.Combina grafici con grid.arrange e regola la dimensione del grafico e l'etichetta dell'asse
Così qui sono i miei due set di dati:
testxy
SN strain est low up
1 A xy 11.6751 11.1480 12.2021
2 B xy 11.4211 11.1108 11.7314
3 C xy 2.6603 2.4291 2.8915
4 D xy 4.5503 4.2972 4.8034
testyz
SN strain est low up
5 A yz 22.1761 21.5136 22.8387
6 C yz 21.4829 21.0251 21.9408
7 B yz 19.3294 18.8950 19.7639
8 D yz 19.9990 19.3934 20.6047
E questo è il codice che ho finora. È vicino a quello che voglio, ma proprio vicino:
p1<-ggplot(data=testxy, aes(colour=strain, x=SN, y=est))+
theme(panel.background = element_rect(fill = 'white', colour = 'black'))+
theme(legend.position="none")+
theme(axis.title.x = element_text(size = rel(1.5), vjust=-0.1),
axis.title.y = element_text(size = rel(1.5), vjust=1), axis.text.y = element_text(size = rel(1.4)), axis.text.x = element_text(hjust = 1, size = rel(1.5)),plot.title = element_text(size = rel(2.5), lineheight=1, face="bold"))+
theme(plot.margin=unit(c(5,5,5,5),"mm"))+
labs(x="treatment", y="integral", title="xy")+
scale_colour_manual(name="strain", values=c(xy="blue"))+
theme(strip.text.x = element_text(size=12, face="bold"), strip.background = element_rect(colour="black", fill="white"))+
geom_point(aes(color="xy"), size=5, alpha=0.1, shape=16)+
geom_errorbar(aes(ymin=low, ymax=up, width=0.2), colour="deepskyblue", size=0.8)+
scale_y_continuous(breaks=seq(5,20,5), limits=c(2,23.5))
p2<-ggplot(data=testyz, aes(colour=strain, x=SN, y=est))+
theme(panel.background = element_rect(fill = 'white', colour = 'black'))+
theme(legend.position="right")+
theme(axis.title.x = element_text(size = rel(1.5), vjust=-0.1), axis.ticks.y = element_blank(), axis.text.y = element_blank(), axis.text.x = element_text(hjust = 1, size = rel(1.5)), plot.title = element_text(size = rel(2.5), lineheight=1, face="bold"))+
theme(plot.margin=unit(c(5,5,5,5),"mm"))+
labs(x="treatment", y=NULL, title="yz")+
scale_colour_manual(name="strain", values=c(yz="green", xy="blue"))+
theme(strip.text.x = element_text(size=12, face="bold"), strip.background = element_rect(colour="black", fill="white"))+
geom_point(aes(color="yz"), size=5, alpha=0.1, shape=16)+
geom_point(aes(color="xy"), size=0)+
geom_errorbar(aes(ymin=low, ymax=up, width=0.2), colour="green", size=0.8)+
scale_y_continuous(breaks=seq(5,20,5), limits=c(2,23.5))+
scale_x_discrete(limits=c("A", "C", "B", "D"))
grid.arrange(p1,p2, ncol=2)
Ho provato sfaccettatura prima. Sembra davvero buono, ma sfortunatamente, ho bisogno di cambiare l'ordine dello levels
sugli assi x. Quindi, penso che lo sfaccettatura non funzioni per me.
Spero che tu possa aiutarmi.
Acclamazioni Anne
Se usi dput con i tuoi dati, posso sperimentare più facilmente la mia R (se lo fai oltre alla stampa dei dati, possiamo leggere e sperimentare facilmente). Non sono sicuro del motivo per cui l'uso della sfaccettatura non funzionerebbe; sembra giusta soluzione. – kasterma
Anne, benvenuto in SO e buon primo post! –
Vedere [questa risposta] (http://stackoverflow.com/a/28594060/1412059)? – Roland