[英]Combine plots with grid.arrange and adjust plot size and axis label
我想將兩個ggplots
與grid.arrange
結合起來,只有一個常規圖例。 我設法將這兩個傳說與一個小技巧結合起來,但是自從我從第一個圖中刪除了這個圖例,當然這個版本在grid.arrange
之后更廣泛。 如何將兩個繪圖區域設置為相同的大小? 而且我希望在兩個圖下方都有一個共同的x軸標簽。 grid.arrange
是可能的嗎? 我知道,之前已經回答了類似的問題,但我仍然是R
的新手,解決方案太復雜,或者我無法將它們與我的數據相匹配。
所以這是我的兩個數據集:
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
這是我到目前為止的代碼。 它接近我想要的,但只是關閉:
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)
我以前試過過facetting。 它看起來非常好,但不幸的是,我需要改變x軸上的levels
順序。 所以,我認為facetting對我不起作用。
我希望你能幫助我。
干杯安妮
你應該使用facetting:
testxy <- read.table(text = " 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", header = TRUE)
testyz <- read.table(text = " 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", header = TRUE)
test <- rbind(cbind(testxy, fac = "xy"),
cbind(testyz, fac = "yz"))
test$SN1 <- interaction(test$SN, test$fac)
test$SN1 <- ordered(test$SN1, levels = test$SN1)
ggplot(data=test, aes(colour=strain, x=SN1, y=est)) +
geom_point() +
facet_wrap(~ fac, scales = "free_x") +
scale_x_discrete(labels = setNames(as.character(test$SN), as.character(test$SN1)))
然而,這不是一個好的情節,因為讀者通常不會注意到x軸是不同的。
如果facetting的唯一問題是級別的順序,可以通過在調用ggplot2之前重新排序factor-variable來解決它。
轉換為因子時,您可以指定因子的級別順序。
df = rbind(testxy, testyz)
df$strain <- factor(as.character(df$strain), levels=c('yz','xy'))
ggplot(df, aes(colour=strain, x=SN, y=est))+facet_grid(.~strain)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.