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

如何在R中绘制含SES_Cscore与物种分组的双柱条形图

解决方案:将SES_Cscore作为X轴展示C-score条形图

步骤1:数据预处理

首先拆分数据集,提取每个物种对应的SES_Cscore值,再将观测值(obs.C-score)和预期值(exp.C-score)与该值关联:

library(tidyverse)

# 提取每个物种的SES_Cscore值
ses_data <- data %>% 
  filter(variable == "SES_Cscore") %>% 
  select(Species, ses_value = value)

# 整理用于绘制条形图的数据(仅保留obs和exp)
bar_data <- data %>% 
  filter(variable %in% c("obs.C-score", "exp.C-score")) %>% 
  left_join(ses_data, by = "Species")

步骤2:绘制基础图表

以SES_Cscore为X轴连续刻度,每个刻度位置对应一个物种,并排展示obs和exp的条形图,同时添加物种标签便于识别:

ggplot(bar_data, aes(x = ses_value, y = value, fill = variable)) +
  # 绘制分组条形,调整间距避免重叠
  geom_bar(stat = "identity", position = position_dodge(width = 0.5), width = 0.4) +
  # 在每个条形组上方添加物种名称
  geom_text(data = ses_data, aes(x = ses_value, y = 0, label = Species), 
            vjust = -0.5, size = 3.5) +
  # 自定义填充颜色
  scale_fill_manual(values = c("obs.C-score" = "#2E86AB", "exp.C-score" = "#F24C4C")) +
  # 设置图表标签
  labs(x = "SES_Cscore", y = "C-score Value", fill = "Variable") +
  # 使用简洁主题并调整X轴文本角度
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

步骤3:优化图表(解决数值范围差异问题)

由于不同物种的C-score数值跨度极大,小数值会被大数值覆盖,可对Y轴做对数转换:

ggplot(bar_data, aes(x = ses_value, y = value, fill = variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.5), width = 0.4) +
  geom_text(data = ses_data, aes(x = ses_value, y = 1000, label = Species), 
            vjust = -0.5, size = 3.5) +
  scale_fill_manual(values = c("obs.C-score" = "#2E86AB", "exp.C-score" = "#F24C4C")) +
  # 对数转换Y轴,适配大跨度数值
  scale_y_log10() +
  labs(x = "SES_Cscore", y = "对数转换后的C-score值", fill = "变量类型") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

核心说明

  • 以每个物种的SES_Cscore值作为X轴的连续位置,同时通过文本标签标注物种名称,实现"SES与物种共同作为X轴"的需求。
  • position_dodge参数用于控制分组条形的间距,避免条形重叠。
  • 对数Y轴可有效展示数值跨度极大的数据集,避免小数值被大数值覆盖。

内容的提问来源于stack exchange,提问作者Marnee Roundtree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:21:07