R语言校准ggplot分面直方图计数 消除调查面积影响展示蛤蜊密度差异
解决思路
你的核心需求是消去调查面积的干扰,让y轴反映单位面积下各尺寸的个体数量,直接和种群密度挂钩,跨站点可比。实现逻辑非常简单:把每个尺寸分组的计数除以对应站点的调查面积即可。
实现代码
这里提供两种实现方式,按需选择即可:
方式1:直接在ggplot中计算,适合快速出图
library(ggplot2) ggplot(d, aes(x=size, fill=site)) + geom_histogram( aes(y = stat(count / ave(area, site, FUN = unique)), group=site), binwidth = 1, boundary = 0.5 ) + facet_grid(site ~ .) + labs(y = "单位面积个体数(个/m²)", x = "蛤蜊尺寸")
方式2:先汇总数据再绘图,逻辑更清晰可控
library(dplyr) library(ggplot2) # 先按站点、尺寸分组汇总,计算单位面积个体数 d_processed <- d %>% # 统计每个站点各尺寸的观测数 count(site, size, name = "count") %>% # 匹配每个站点对应的调查面积 left_join(d %>% distinct(site, area), by = "site") %>% # 计算单位面积的个体数 mutate(count_per_sqm = count / area) # 用柱状图绘制汇总好的数据 ggplot(d_processed, aes(x = size, y = count_per_sqm, fill = site)) + geom_col(width = 0.9) + facet_grid(site ~ .) + labs(y = "单位面积个体数(个/m²)", x = "蛤蜊尺寸")
结果说明
上述代码输出的图表完全符合你的要求:
- 同密度的站点(如密度0.5的D、C站点)各尺寸柱高之和一致,不会因调查面积不同出现高度差异
- 不同密度的站点(如密度0.5的D和密度1.0的B)柱高总和有明显差异,可直观对比种群密度高低
- 各站点的尺寸分布特征清晰保留,可同时对比尺寸分布差异
内容的提问来源于stack exchange,提问作者SeanB
相关产品推荐
相关产品推荐

