R语言箱线图添加散点异常:仅单个箱线图显示散点求助
箱线图仅单个分组显示散点的问题排查与解决
问题现象
用R绘制箱线图后,通过stripchart添加散点时,仅第一个分组(Cape Henlopen)显示散点,第二个分组(Brandywine)无散点,效果如下:

使用的代码如下:
#graphics.off() rm(list=ls()) # Inputs CapeHenlopen <- c(1,4,3,15,2,3,4,1,10,7,3,1,1,1,4,44,4,2,2,5,1) Brandywine<- c(1,75,20,15,2,104,3,14,1) # Outputs dev.new() # Open a new window for my boxplot boxplot(CapeHenlopen,Brandywine, horizontal = FALSE, xlab = c('Location'), ylab= 'Number of Individuals', col=c('red','blue'), names=c('Cape Henlopen', 'Brandywine')) stripchart(CapeHenlopen, Brandywine, vertical = TRUE, method = "stack", pch = 19, add = TRUE) dev.copy(png,'myplot.png')
问题原因
stripchart直接传入两个向量时,会把它们合并成同一组数据,默认只在x轴第一个位置(对应第一个箱线图)绘制所有散点,导致第二个分组无散点。
解决方案
将两个向量放入列表传递给stripchart,让函数识别为两个独立分组,对应箱线图的两个x轴位置:
#graphics.off() rm(list=ls()) # Inputs CapeHenlopen <- c(1,4,3,15,2,3,4,1,10,7,3,1,1,1,4,44,4,2,2,5,1) Brandywine<- c(1,75,20,15,2,104,3,14,1) # Outputs dev.new() # Open a new window for my boxplot boxplot(CapeHenlopen,Brandywine, horizontal = FALSE, xlab = 'Location', ylab= 'Number of Individuals', col=c('red','blue'), names=c('Cape Henlopen', 'Brandywine')) # 修改为列表形式传递数据 stripchart(list(CapeHenlopen, Brandywine), vertical = TRUE, method = "stack", pch = 19, add = TRUE) dev.copy(png,'myplot.png') dev.off() # 关闭设备以确保图片保存
也可以用数据框+公式的方式实现,更贴合R的数据分析习惯:
# 构造数据框 df <- data.frame( Count = c(CapeHenlopen, Brandywine), Location = rep(c('Cape Henlopen', 'Brandywine'), times = c(length(CapeHenlopen), length(Brandywine))) ) dev.new() boxplot(Count ~ Location, data = df, horizontal = FALSE, xlab = 'Location', ylab= 'Number of Individuals', col=c('red','blue')) stripchart(Count ~ Location, data = df, vertical = TRUE, method = "stack", pch = 19, add = TRUE) dev.copy(png,'myplot.png') dev.off()
效果说明
修改后,两个分组的散点会分别对应到各自的箱线图位置,Brandywine的散点会显示在蓝色箱线图区域。
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

