最近在学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)
图形如下:
仿得还是挺像的!