如何用R-base为双数据框生成的箱线图标注Min、Median、Max
在R-base箱线图中标注最小值、中位数、最大值
步骤1:提取关键统计值
先分别计算两个班级年龄的最小值、中位数、最大值:
# 计算class1的统计指标 class1_stats <- data.frame( min = min(class1$Age), median = median(class1$Age), max = max(class1$Age) ) # 计算class2的统计指标 class2_stats <- data.frame( min = min(class2$Age1), median = median(class2$Age1), max = max(class2$Age1) )
步骤2:绘制箱线图并添加标注
绘制基础箱线图后,利用text()函数将统计值标注到对应位置(class1对应x轴位置1,class2对应x轴位置2),同时调整y轴范围避免标注超出图框:
# 绘制箱线图,预留标注空间 boxplot(class1$Age, class2$Age1, names = c("class1", "class2"), ylab= "年龄", xlab= "班级", ylim = c(15, 100)) # 标注class1的统计值 text(x = 1, y = class1_stats$min - 3, labels = paste("min:", class1_stats$min)) text(x = 1, y = class1_stats$median, labels = paste("median:", class1_stats$median)) text(x = 1, y = class1_stats$max + 3, labels = paste("max:", class1_stats$max)) # 标注class2的统计值 text(x = 2, y = class2_stats$min - 3, labels = paste("min:", class2_stats$min)) text(x = 2, y = class2_stats$median, labels = paste("median:", class2_stats$median)) text(x = 2, y = class2_stats$max + 3, labels = paste("max:", class2_stats$max))
完整整合代码
# 创建数据集 Name <- c("Jon", "Bill", "Maria", "Ben", "Tina") Age <- c(23, 41, 32, 58, 26) class1 <- data.frame(Name, Age) Name1 <- c("Suma", "Mia", "Sam", "Jon", "Brian", "Grace", "Julia") Age1 <- c(33, 21, 56,32,65,32,89) class2 <- data.frame(Name1, Age1) # 计算统计指标 class1_stats <- data.frame( min = min(class1$Age), median = median(class1$Age), max = max(class1$Age) ) class2_stats <- data.frame( min = min(class2$Age1), median = median(class2$Age1), max = max(class2$Age1) ) # 绘制箱线图并标注 boxplot(class1$Age, class2$Age1, names = c("class1", "class2"), ylab= "年龄", xlab= "班级", ylim = c(15, 100)) # 标注class1 text(x = 1, y = class1_stats$min - 3, labels = paste("min:", class1_stats$min)) text(x = 1, y = class1_stats$median, labels = paste("median:", class1_stats$median)) text(x = 1, y = class1_stats$max + 3, labels = paste("max:", class1_stats$max)) # 标注class2 text(x = 2, y = class2_stats$min - 3, labels = paste("min:", class2_stats$min)) text(x = 2, y = class2_stats$median, labels = paste("median:", class2_stats$median)) text(x = 2, y = class2_stats$max + 3, labels = paste("max:", class2_stats$max))
细节调整说明
ylim = c(15, 100):手动调整y轴范围,避免最大值的标注超出图框text()函数中通过y = 统计值 ±3调整标注位置,避免与箱线图元素重叠- 可额外添加
col(颜色)、cex(字号)参数优化标注样式,例如text(..., col="darkred", cex=0.8)
内容的提问来源于stack exchange,提问作者adam
相关产品推荐
相关产品推荐

