最近經常要畫好看的盒形圖,還要在上面加入散點,所以總結了兩個方法。
第一種方法是,利用beeswarm函數:
library(beeswarm) beeswarm 蜜蜂群圖
http://rgm3.lab.nig.ac.jp/RGM/r_function?p=beeswarm&f=beeswarm
可以結合盒形圖展示。


有多種布局方法method = c("swarm", "center", "hex", "square"),通過spacing = 1來控制點的密集程度
另一個方法是,利用jitter函數加入隨機波動:

以下是代碼:
先按照Group1的順序畫好盒形圖,加入斷軸,
再按照Group1排序(1、2、3組)加入波動,波動的變量xx就是新的橫坐標,然后再畫散點圖就行了。
圖中因為有些點多有些點少,畫散點的時候我按照點多的顏色先畫的原則(避免點少的顏色被覆蓋看不到了),所以最后畫點又排了次序。
boxplot(Ratio~Group1,data=dat,ylab="Mapped Reads Ratio(%)",outline=F,names=c("NGT","IGT","T2D"),ylim=c(57,85))
library(plotrix)
axis.break(2,57.5)
num=table(dat[,"Group1"])
xx=jitter(c(rep(1,num[1]), rep(2, num[2]), rep(3,num[3])),amount=0.3)#加入波動
dat2=dat[order(dat[,"Group1"]),]
dat3=cbind(dat2,xx)
dat4=dat3[order(dat3[,"Group2"]),]#按照國家排序畫圖
points(dat4[,7],dat4[,2],col=rainbow(11)[(dat4[,"Group2"]+11)%%11+1],pch=16)
dat5=dat[order(dat[,"Group2"]),]
leg=unique(cbind(as.vector(dat5[,4]),dat5[,6]))
legend("bottomright", as.vector(leg[,1]), col=rainbow(11)[(seq(1,11)+11)%%11+1],pch = 16, ncol = 3, cex =1)
