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

如何在R中绘制按niv_alti分组的pour_eau、pour_MO双系列条形图

R 双系列分组条形图实现方法

你可以通过以下两种方案实现需求,核心是构造双系列的输入数据、开启分组绘图参数:

方案1:基础R barplot 实现(适配你现有写法)

核心要设置beside = TRUE参数,该参数控制条形是并排展示而非堆叠,同时将两个指标的数值整理为矩阵输入:

# 第一步:预处理数据,删除含NA的样本(4c行的pour_MO为缺失值,也可根据需求替换为0)
mat_clean <- na.omit(mat)
# 第二步:构造绘图矩阵,转置后每列对应一个海拔水平的两个指标数值
plot_mat <- t(mat_clean[, c("pour_eau", "pour_MO")])
# 第三步:绘制分组条形图
bar_pos <- barplot(plot_mat, 
               beside = TRUE, # 核心参数:开启并排分组
               names.arg = mat_clean$niv_alti,
               xlab = "海拔水平(niv_alti)",
               ylab = "数值",
               col = c("steelblue", "orange"), # 两个系列的填充色
               ylim = c(0, max(plot_mat, na.rm = TRUE) + 5) # 调整y轴范围给图例/数值标签留空间
)
# 可选:添加图例
legend("topright", 
       legend = c("含水率(pour_eau)", "有机质含量(pour_MO)"),
       fill = c("steelblue", "orange")
)
# 可选:在条形上方添加数值标签
text(x = bar_pos, y = plot_mat + 0.8, labels = as.character(plot_mat), cex = 0.8)

方案2:ggplot2实现(更灵活的可视化方案)

用ggplot2的分组合并逻辑更清晰,适合后续调整样式:

library(ggplot2)
library(tidyr)
library(dplyr)

# 1. 数据预处理:删除缺失值+宽表转长表
mat_long <- mat %>%
  na.omit() %>%
  pivot_longer(cols = c(pour_eau, pour_MO), names_to = "指标", values_to = "数值")

# 2. 绘制分组条形图
ggplot(mat_long, aes(x = factor(niv_alti), y = 数值, fill = 指标)) +
  geom_col(position = position_dodge(0.9), width = 0.8) +
  labs(x = "海拔水平(niv_alti)", y = "数值") +
  scale_fill_manual(values = c("steelblue", "orange"),
                    labels = c("含水率", "有机质含量")) +
  theme_bw()

注意事项

  • 原数据存在两个海拔为-0.71的样本,如果你需要对同一海拔的数值做平均/求和后再绘图,可先按niv_alti分组聚合后再执行绘图逻辑。
  • 若需要保留含NA的4c样本,可将na.omit(mat)替换为mat |> mutate(pour_MO = replace(pour_MO, is.na(pour_MO), 0)),将缺失值替换为0后绘图。

内容的提问来源于stack exchange,提问作者Von Linné

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:15:03