蜜蜂图或蜂群图(beeswarm)这个名字,大家可能比较陌生,但是大家肯定都见过他的尊容。下面这张图就是一个典型的蜜蜂图。因为看上去像一群飞舞的蜜蜂而得名。
可能大家觉得蜜蜂图跟散点图或者jitter图差不多,但实际上他们之间还是有很大区别的。
上面三张图,从上至下分别为jitter图,蜜蜂图(beeswarm)和散点图。从图中可以发现,beeswarm很好的体现了数据的分布,更加清楚、直观。而jitter图和散点图,难以快速获取信息,point图中点过于密集,jitter中分布过于散乱。这也是很多科学论文选择beeswarm图的原因,在小样本下也许jitter或者points的方法也能够传达我们想要传递的信息,但是在样本量较大的时候,这两个绘图方法就不太适合了。而beeswarm图在大样本的情况下也比较适用。不仅可以体现每一个样本具体情况,而且能够查看整体的情况。
下面是绘制这三张图的具体代码
代码语言:javascript复制#安装beeswarm包
install.packages("beeswarm")
#加载beeswarm包
library(beeswarm)
#生成一个pdf文件来保存图片
pdf(file="stripchart_beeswarm_points.pdf",height=9,width=9)
par(mfrow=c(3,1))
#绘制jitter图
stripchart(decrease ~ treatment, data = OrchardSprays, vertical = TRUE,
log = "y", method = 'jitter', jitter = 0.2, cex = 1,pch = 16,
col = rainbow(8),main = 'stripchart')
#绘制蜜蜂图
beeswarm(decrease ~ treatment, data = OrchardSprays, log = TRUE,
pch = 16, col = rainbow(8),main = 'beeswarm')
#绘制散点图
plot(as.numeric(OrchardSprays$treatment),
log2(OrchardSprays$decrease),
type="p",pch=16,
col=rainbow(8)[OrchardSprays$treatment],
ylab="decrease",
xlab="treatment",
xaxt="n",
main="points"
)
xtick=seq_along(levels(OrchardSprays$treatment))
axis(side=1, at=xtick, labels = FALSE,tcl = -0.2)
text(x=xtick, par("usr")[3],
labels = levels(OrchardSprays$treatment), pos = 1, xpd = TRUE)
dev.off()
在stripchart_beeswarm_points.pdf文件中我们就能找到绘制的三张图了。后面小编会详细给大家介绍beeswarm这个R包的使用,绘制更多不同类型的蜜蜂图。