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

R语言:如何按type因子拆分mxdpt变量绘制分组均值散点图

解决方法

1. 先整理数据(用dplyr+tidyr处理)

你需要先按plot和type分组计算均值,再把数据转成宽格式,让每个plot对应一行,同时包含litter和soil的mxdpt均值,这样才能直接用这两个均值做x、y轴。

代码示例:

library(dplyr)
library(tidyr)

# 计算每个plot下不同type的mxdpt均值,再转成宽格式
summary_data <- cstock %>%
  group_by(plot, type) %>%
  summarise(mean_mxdpt = mean(mxdpt, na.rm = TRUE)) %>%  # 忽略缺失值计算均值
  pivot_wider(names_from = type, values_from = mean_mxdpt)

执行后summary_data会有三列:plot、litter、soil,每一行对应一个plot的两个均值。

2. 用ggplot绘制目标散点图

用整理好的数据绘图,每个点代表一个plot,x轴是litter均值,y轴是soil均值:

library(ggplot2)

ggplot(summary_data, aes(x = litter, y = soil)) +
  geom_point(size = 3, color = "steelblue") +  # 设置散点大小和颜色
  labs(
    x = "Litter层mxdpt均值",
    y = "Soil层mxdpt均值",
    title = "各Plot的Litter与Soil层mxdpt均值散点图"
  ) +
  theme_minimal()

如果需要添加线性拟合趋势线,可加上geom_smooth:

ggplot(summary_data, aes(x = litter, y = soil)) +
  geom_point(size = 3, color = "steelblue") +
  geom_smooth(method = "lm", se = TRUE, color = "darkred") +  # 带置信区间的线性拟合线
  labs(
    x = "Litter层mxdpt均值",
    y = "Soil层mxdpt均值",
    title = "各Plot的Litter与Soil层mxdpt均值散点图(含拟合线)"
  ) +
  theme_minimal()

原代码问题说明

你之前的代码直接在原始数据上用stat_summary,x、y轴都用了原始的mxdpt,相当于把所有数据按type分开展示均值,而不是将每个plot的两个均值配对成坐标点,所以不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:24:31