在AQP包中实现土壤剖面集合的分面展示(类似ggplot的facet_wrap)
在AQP包中实现土壤剖面集合的分面展示(类似ggplot的facet_wrap)
很高兴帮你解决这个问题!要在AQP包中实现类似ggplot的facet_wrap效果,把同一个土壤剖面的Pb和Mn参数并排展示,我们可以通过整理数据格式 + 利用AQP的分面功能来实现,具体步骤如下:
1. 补全土壤剖面集合(SPC)对象的创建
你已经完成了数据的初步处理,先把SPC对象创建完整:
library(aqp) library(dplyr) library(tidyr) # 你的原始数据 soil_data <- data.frame(rating=1:4, id=c('1', '1', '1', '1'), name=c('A', 'B', 'Ag2', 'Cg1'), top = c('0', '5', '10', '15'), bottom = c('5', '10','15','20'), Pb = c('3.4', '0', '2', '5.6'), Mn = c('4', '0.1', '3.2', '6')) # 数据类型转换 soil_data$top <- as.numeric(soil_data$top) soil_data$bottom <- as.numeric(soil_data$bottom) soil_data <- soil_data %>% mutate(height = bottom - top) # 创建SPC对象(AQP的核心数据结构) depths(soil_data) <- id ~ top + bottom
2. 将宽格式数据转为长格式
要实现分面,我们需要把Pb和Mn这两个参数整合到一列中,变成tidy数据格式:
soil_data_long <- soil_data %>% # 把Pb、Mn列转为长格式 pivot_longer(cols = c(Pb, Mn), names_to = "element", values_to = "concentration") %>% # 确保浓度值是数值型(原始数据是字符,必须转换) mutate(concentration = as.numeric(concentration))
3. 方法一:使用AQP原生plotSPC实现分面
AQP的plotSPC函数支持直接通过facet参数指定分面变量,轻松实现并排展示:
plotSPC(soil_data_long, color = "concentration", # 用浓度值填充剖面颜色 facet = ~element, # 按element(Pb/Mn)分面 width = 0.5, # 调整单个剖面的宽度 name.style = "center-center", # 土层名称居中显示 color.legend.title = "Concentration") # 图例标题
4. 方法二:结合ggplot2的ggspc接口(更贴近ggplot体验)
如果你习惯ggplot的语法,可以用AQP提供的ggspc函数,完全兼容ggplot的facet_wrap:
library(ggplot2) ggspc(soil_data_long) + geom_hzfill(aes(fill = concentration)) + # 填充土层颜色 geom_hzline() + # 绘制土层边界线 geom_hztitle() + # 添加土层名称 facet_wrap(~element, nrow = 1) + # 横向并排分面(nrow=1表示一行展示) scale_fill_viridis_c(name = "Concentration") + # 用viridis配色更美观 theme_minimal() + theme(axis.text.y = element_text(angle = 90, hjust = 0.5)) # 调整y轴标签角度
这两种方法都能实现你想要的效果:同一个土壤剖面的Pb和Mn参数分面并排展示,和ggplot的facet_wrap逻辑一致。你可以根据自己的使用习惯选择其中一种。
备注:内容来源于stack exchange,提问作者Kerry Kuntz
相关产品推荐
相关产品推荐

