本篇主要想復現文章中的一張圖,原圖來源(Antibiotic resistome and its association with bacterial communities during sewage sludge composting);app
首先來分析一下張圖,我的認爲至少須要兩個圖層疊加,ide
1.堆積條形圖和x軸,左y軸,堆積條形圖的圖例是一個圖層;佈局
2.點線圖和點線圖的圖例,右y軸是一個圖層;post
固然,你還能夠拆分,好比圖例也是單獨圖層添加,徹底沒有問題,可是那樣就麻煩了,須要考慮佈局,繪圖區域大小等問題;
spa
咱們沒有跟文獻中的圖如出一轍,沒有仔細閱讀文章,不清楚繪圖的數據是否在文章中都提供了,本身造數據吧,最終繪圖結果以下:blog
圖的意思呢,每一個柱子表明每次模擬考試成績的分值,用堆積條形圖來展現,上方的點線圖是表明每次模擬考試數學成績所佔的百分比。圖片
好了,先模擬數據;ci
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參數須要我的根據後續要添加的點線圖不斷嘗試(這個在每一個人的電腦上展現的圖片效果可能不同,代碼能夠照搬,但要修改一些佈局參數)。it
添加第二個圖層;
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),使其恢復到最開始的狀態。
好了,本次就到這裏。