如何在R语言绘制的直方图中展示平均值、中位数与标准差
在R语言直方图中添加平均值、中位数和标准差的方法
你可以通过计算统计量、绘制标记线和添加文本标注这几步,在现有直方图中加入平均值、中位数和标准差信息。以下是具体实现方式:
单数据集的基础实现
以DBN数据集为例,先提取数据、计算统计量,再在直方图上添加标记:
# 提取目标数据列 prod_dbn <- DBN$Productivity...Productivité # 计算统计量(na.rm = TRUE 处理缺失值) mean_dbn <- mean(prod_dbn, na.rm = TRUE) median_dbn <- median(prod_dbn, na.rm = TRUE) sd_dbn <- sd(prod_dbn, na.rm = TRUE) # 绘制基础直方图 hist(prod_dbn, main = "DBN", xlab = "Productivity") # 添加平均值竖线(红色实线,线宽2) abline(v = mean_dbn, col = "red", lwd = 2, lty = 1) # 添加中位数竖线(蓝色虚线,线宽2) abline(v = median_dbn, col = "blue", lwd = 2, lty = 2) # 在图中添加统计量文本(位置可根据需求调整) hist_counts <- hist(prod_dbn, plot = FALSE) # 获取直方图频数信息,避免重复绘图 text(x = max(prod_dbn)*0.8, y = max(hist_counts$counts)*0.8, labels = paste0("Mean: ", round(mean_dbn, 2), "\nMedian: ", round(median_dbn, 2), "\nSD: ", round(sd_dbn, 2)), col = "black", cex = 0.8)
批量处理多个数据集(推荐)
由于你需要绘制4个数据集的直方图,用函数封装代码可以减少重复工作:
# 定义通用绘图函数 plot_hist_with_stats <- function(data, col_name, main_title) { prod_data <- data[[col_name]] # 计算统计量 mean_val <- mean(prod_data, na.rm = TRUE) median_val <- median(prod_data, na.rm = TRUE) sd_val <- sd(prod_data, na.rm = TRUE) # 绘制直方图 hist(prod_data, main = main_title, xlab = "Productivity") # 添加标记线 abline(v = mean_val, col = "red", lwd = 2, lty = 1) abline(v = median_val, col = "blue", lwd = 2, lty = 2) # 添加文本标注 hist_info <- hist(prod_data, plot = FALSE) text(x = max(prod_data)*0.8, y = max(hist_info$counts)*0.8, labels = paste0("Mean: ", round(mean_val, 2), "\nMedian: ", round(median_val, 2), "\nSD: ", round(sd_val, 2)), col = "black", cex = 0.8) } # 调用函数绘制四个直方图 plot_hist_with_stats(PRE, "Productivity...Productivité", "PRE") plot_hist_with_stats(DBN, "Productivity...Productivité", "DBN") plot_hist_with_stats(DBG, "Productivity...Productivité", "DBG") plot_hist_with_stats(POST, "Productivity...Productivité", "POST")
可选:把统计量放在标题中
如果更倾向于在标题里展示统计信息,可直接修改main参数:
prod_dbn <- DBN$Productivity...Productivité mean_dbn <- mean(prod_dbn, na.rm = TRUE) median_dbn <- median(prod_dbn, na.rm = TRUE) sd_dbn <- sd(prod_dbn, na.rm = TRUE) # 拼接带统计量的标题 main_title <- paste0("DBN\nMean: ", round(mean_dbn,2), " | Median: ", round(median_dbn,2), " | SD: ", round(sd_dbn,2)) hist(prod_dbn, main = main_title, xlab = "Productivity")
内容的提问来源于stack exchange,提问作者Richard Michaud Langis
相关产品推荐
相关产品推荐

