本篇主要想復現文章中的一張圖,原圖來源(Antibiotic resistome and its association with bacterial communities during sewage sludge composting);
首先來分析一下張圖,個人認為至少需要兩個圖層疊加,
1.堆積條形圖和x軸,左y軸,堆積條形圖的圖例是一個圖層;
2.點線圖和點線圖的圖例,右y軸是一個圖層;
當然,你還可以拆分,比如圖例也是單獨圖層添加,完全沒有問題,但是那樣就麻煩了,需要考慮布局,繪圖區域大小等問題;
我們沒有跟文獻中的圖一模一樣,沒有仔細閱讀文章,不清楚繪圖的數據是否在文章中都提供了,自己造數據吧,最終繪圖結果如下:
圖的意思呢,每個柱子代表每次模擬考試成績的分值,用堆積條形圖來展示,上方的點線圖是代表每次模擬考試數學成績所占的百分比。
好了,先模擬數據;
mypar <- par(no.readonly = T)# 保存par的默認參數
set.seed(200) #設定隨機數
library(RColorBrewer) #加載顏色面板
mycol<- brewer.pal(7,"Set1")#存儲顏色
數學 <- round(runif(7,50,100),3)
語文 <- round(runif(7,50,100),3)
英語 <- round(runif(7,10,100),3)
生物 <- round(runif(7,70,100),3)
物理 <- round(runif(7,60,100),3)
地理 <- round(runif(7,80,100),3)
歷史 <- round(runif(7,50,100),3)
myframe <- data.frame(數學,語文,英語,生物,物理,地理,歷史)
mymatrix <- t(as.matrix(myframe))
mysum <- apply(mymatrix, 2, sum) #每次模擬總成績
ratio_shuexue <- mymatrix[1,]/mysum #每次模擬數學所占比例
moni <- c("模擬1","模擬2","模擬3","模擬4","模擬5","模擬6","模擬7")
第一個圖層:
par(mar=c(5,4,6,5)) #設置繪圖區域邊界
mybar <- barplot(mymatrix,col=mycol[1:7],space = 0.5,axes = F,names.arg = moni,cex.names = .8,xlim = c(0,11),ylim = c(0,800)) #繪制條形圖
par(xpd=T) #確保繪圖區域外部能添加元素
legend(1,900,legend = colnames(myframe),fill = mycol[1:7],border = F,ncol = 7,cex=.8,x.intersp = .2,y.intersp = .5,text.font = 1,bty = "n",text.width = .3)#添加圖例
axis(side = 2,at = seq(0,800,400),cex.axis=.8,line = -2)#添加左坐標軸
其中par 中mar參數需要個人根據后續要添加的點線圖不斷嘗試(這個在每個人的電腦上展示的圖片效果可能不一樣,代碼可以照搬,但要修改一些布局參數)。
添加第二個圖層;
par(new=T) #添加新圖層
par(mar=c(3.5,4,6,4)) #設置繪圖邊界
plot(mybar,ratio_shuexue,type="b",axes=F,ann=F,xlim = c(0,11),ylim = c(0,0.18),col='black',lwd=2,pch=19)#添加點線圖
axis(side = 4,at = seq(0,0.18,0.02),cex.axis=.8,line = -3)#添加右坐標軸
legend(0.1,0.15,legend = "數學比例",col="black",bty="n",pch=19,x.intersp = .3,lty=1,lwd=2)#添加圖例
mtext("分數",side = 2,font = 2,cex=1)#添加坐標軸標題
mtext("百分比",side = 4,font = 2,cex=1)
par(mypar)#恢復默認繪圖參數
運行完這部分代碼就能得到一開始的那張圖了,par參數在rstudio里面設置一次就會一直生效,除非關閉再打開,所以代碼最后設置par(mypar),使其恢復到最開始的狀態。
好了,本次就到這里。