You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:53:13