如何在R语言中于同一画布绘制多组土壤湿度箱线图?
嘿,我来帮你搞定这个箱线图绘制的问题!你的数据集结构很典型,只需要先把宽格式数据转成长格式,再用ggplot2(比基础R的boxplot()更灵活好用)就能轻松画出想要的可视化结果啦。下面是一步步的操作指南:
1. 导入你的CSV数据
首先用read.csv()读取你的数据,记得把类别列保留为字符型(避免自动转成因子,新版本R默认已经是这样,但还是提一下更稳妥):
# 替换成你的CSV文件路径 soil_data <- read.csv("你的土壤湿度数据.csv", stringsAsFactors = FALSE)
2. 将宽格式数据转换为长格式
你的原始数据是宽格式(每个日期占一列),而可视化工具更适合长格式(一列存日期、一列存湿度值、一列存站点类别)。用tidyr包的pivot_longer()就能快速转换:
# 如果没装tidyr,先运行:install.packages("tidyr") library(tidyr) long_data <- pivot_longer( data = soil_data, cols = -站点类别, # 除了"站点类别"列,其他列都要转换 names_to = "测量日期", # 生成的日期列的名称 values_to = "土壤湿度" # 生成的湿度值列的名称 )
3. 绘制箱线图(两种常用方案)
方案一:同日期下不同类别并排展示
这个方案能直观对比同一日期里,A/C/M/P四类站点的湿度差异:
# 如果没装ggplot2,先运行:install.packages("ggplot2") library(ggplot2) ggplot(long_data, aes(x = 测量日期, y = 土壤湿度, fill = 站点类别)) + geom_boxplot(position = position_dodge(width = 0.8)) + # 让同日期的箱线图并排不重叠 scale_fill_brewer(palette = "Set2") + # 用好看的配色方案(可选) labs( title = "不同站点类别在各日期的土壤湿度分布", x = "测量日期", y = "土壤湿度", fill = "站点类别" ) + theme_minimal()
方案二:每个类别单独一个子图
如果想更清晰地看每个类别随日期的湿度变化,可以用分面展示:
ggplot(long_data, aes(x = 测量日期, y = 土壤湿度)) + geom_boxplot(fill = "#69b3a2") + facet_wrap(~站点类别) + # 按站点类别分成4个子图 labs( title = "各站点类别土壤湿度随日期的分布", x = "测量日期", y = "土壤湿度" ) + theme_minimal()
小技巧:调整日期顺序
默认情况下,x轴的日期会按字母排序(比如feb2018会排在febr2017前面),你可以手动指定日期的顺序:
long_data$测量日期 <- factor( long_data$测量日期, levels = c("febr2017", "mar2017", "jun2017", "sep2017", "feb2018") )
再重新绘图,日期就会按时间先后排列啦!
如果你非要用基础R的boxplot()
虽然ggplot2更灵活,但用基础R也能实现,只需要基于转换后的长格式数据:
boxplot(土壤湿度 ~ 站点类别 * 测量日期, data = long_data, main = "土壤湿度分布", xlab = "站点类别-测量日期", ylab = "土壤湿度")
不过这种方式的可读性不如ggplot2,所以更推荐前面的ggplot2方案哦。
内容的提问来源于stack exchange,提问作者María Paz
相关产品推荐
相关产品推荐

