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
相关产品推荐
相关产品推荐

