最近在學R的繪圖,打算用R語言的boxplot()仿畫geom_boxplot(),仿畫源頭見網址:https://www.r-graph-gallery.com/89-box-and-scatter-plot-with-ggplot2.html
這是一個優秀的R可視化網站,網站里給出了每幅圖的代碼。
生成數據:
data <- data.frame( name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100) ), value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) ) )
先放ggplot2包畫的:
library(ggplot2)
library(scales) ggplot(data,aes(x=name,y=value))+ geom_boxplot(aes(fill=name))+ scale_fill_manual( values=c(alpha("purple",0.5),alpha("green",0.5), alpha("blue",0.5),alpha("yellow",0.5)))+ geom_jitter(colour="black",size=0.4,alpha=0.5)+ labs(title="A boxplot with jitter",x="",y="value")+ theme( legend.position="none", axis.title.y=element_text(hjust=1), plot.title=element_text(size=11), panel.background=element_rect(fill="white"), panel.grid.major.y=element_line(colour="gray",linetype="dotted"), panel.grid.minor.y=element_line(colour="gray",linetype="dotted") )
圖形如下:
再來Base plot畫的:
plot.new() with(data,{ boxplot(value~name,ann=FALSE,axes=FALSE, col=c(scales::alpha("purple",0.5),scales::alpha("green",0.5), scales::alpha("blue",0.5),scales::alpha("yellow",0.5)))#繪制箱圖,ann參數控制是否顯示標題和標簽,axes參數控制是否繪制坐標軸 points(x=jitter(rep(1:4,times=c(500,1000,20,100)),amount=0.5), y=unlist(split(value,name)), cex=0.1,pch=16) })#加入反映數據的擾動散點 axis(2,at=seq(-5,30,5),labels=c("","0","","10","","20","","30"))#繪制y軸 axis(1,at=1:4,labels=c("A","B","C","D"))#繪制x軸 abline(h=seq(-5,30,5),lty="dotted",col="gray")#繪制x軸方向的網格線 mtext(text="A boxplot with jitter",side=3,adj=0) mtext(text="value",side=2,adj=1,line=3)
圖形如下:
仿得還是挺像的!