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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:06