R,按另一列的值缩放直方图计数
R, Scale histogram counts by a value from another column
背景:我在不同地点进行了蛤蜊调查并测量了它们的大小。由于退潮、蛤床范围等的差异,调查没有包括相同的总面积。因此,一些地点可能有高蛤密度(#/m^2)但面积低,因此总计数为低,而其他人可能具有相反的特征(或任何其他组合)。
我正在尝试创建一个多面直方图以显示每个不同 site
的 size
频率,同时消除每个 site
调查的 area
数量的影响.本质上,我想要反映每个站点密度(每单位面积出现次数)的频率,这样我就可以跨站点进行比较,并查看大小分布和相对频率的总体差异。
以下是一些示例数据:
site<-c(rep("D",5),rep("C",10),rep("B",10),rep("A",20))
size<-c(1,2,2,2,3,
1,1,2,2,2,2,2,2,3,3,
1,1,2,2,2,2,2,2,3,3,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3)
area<-c(rep(10,5),rep(20,10),rep(10,10),rep(20,20))
density<-c(rep(5/10,5),rep(10/20,10),rep(10/10,10),rep(20/20,20))
description<-c(rep("Low Density 0.5, Low Area 10",5),rep("Low Density 0.5, High Area 20",10),rep("High Density 1.0, Low Area 10",10),rep("High Density 1.0, High Area 20",20))
d<-data.frame(site,size,area,description)
我知道我可以用 y 轴上的基本计数绘制直方图,显示面积和密度的影响:
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(count),group=site))+
facet_grid(site~.)
受调查区域影响的计数直方图:
或者我可以缩放 y 轴以显示相对频率,因此所有站点的总数 = 1,这也说明了调查区域和密度的影响:
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(count)/sum(count),group=site))+
facet_grid(site~.)
所有站点的相对频率(受调查区域影响):
或者我可以按 site
缩放 y 轴以显示相对频率,因此每个站点内的总数 = 1,这消除了密度和面积的影响(不是我想要的,因为这只允许我比较大小分布的差异,但不比较密度):
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(density*width),group=site))+
facet_grid(site~.)
每个站点的相对频率:
我真的很想消除 area
的影响,以便图形显示密度差异。对于此示例,它应该如下图所示
注意我不得不操纵数据集来人工创建此图作为示例
理想图示例:
谁能帮我弄清楚如何在消除调查总面积的影响的同时显示不同地点的密度差异?
提前致谢!
这是你想要的吗?
library(tidyverse)
d %>%
count(site, size, area, description) %>%
mutate(density = parse_number(word(description, 3))) %>%
group_by(site) %>%
mutate(adj = n / sum(n) / 3 * density) %>%
ggplot(aes(size, adj, fill = description)) +
geom_col() +
facet_wrap(~site, ncol = 1)
背景:我在不同地点进行了蛤蜊调查并测量了它们的大小。由于退潮、蛤床范围等的差异,调查没有包括相同的总面积。因此,一些地点可能有高蛤密度(#/m^2)但面积低,因此总计数为低,而其他人可能具有相反的特征(或任何其他组合)。
我正在尝试创建一个多面直方图以显示每个不同 site
的 size
频率,同时消除每个 site
调查的 area
数量的影响.本质上,我想要反映每个站点密度(每单位面积出现次数)的频率,这样我就可以跨站点进行比较,并查看大小分布和相对频率的总体差异。
以下是一些示例数据:
site<-c(rep("D",5),rep("C",10),rep("B",10),rep("A",20))
size<-c(1,2,2,2,3,
1,1,2,2,2,2,2,2,3,3,
1,1,2,2,2,2,2,2,3,3,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3)
area<-c(rep(10,5),rep(20,10),rep(10,10),rep(20,20))
density<-c(rep(5/10,5),rep(10/20,10),rep(10/10,10),rep(20/20,20))
description<-c(rep("Low Density 0.5, Low Area 10",5),rep("Low Density 0.5, High Area 20",10),rep("High Density 1.0, Low Area 10",10),rep("High Density 1.0, High Area 20",20))
d<-data.frame(site,size,area,description)
我知道我可以用 y 轴上的基本计数绘制直方图,显示面积和密度的影响:
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(count),group=site))+
facet_grid(site~.)
受调查区域影响的计数直方图:
或者我可以缩放 y 轴以显示相对频率,因此所有站点的总数 = 1,这也说明了调查区域和密度的影响:
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(count)/sum(count),group=site))+
facet_grid(site~.)
所有站点的相对频率(受调查区域影响):
或者我可以按 site
缩放 y 轴以显示相对频率,因此每个站点内的总数 = 1,这消除了密度和面积的影响(不是我想要的,因为这只允许我比较大小分布的差异,但不比较密度):
ggplot(d, aes(x=size,fill=site))+
geom_histogram(aes(y=stat(density*width),group=site))+
facet_grid(site~.)
每个站点的相对频率:
我真的很想消除 area
的影响,以便图形显示密度差异。对于此示例,它应该如下图所示
注意我不得不操纵数据集来人工创建此图作为示例
理想图示例:
谁能帮我弄清楚如何在消除调查总面积的影响的同时显示不同地点的密度差异?
提前致谢!
这是你想要的吗?
library(tidyverse)
d %>%
count(site, size, area, description) %>%
mutate(density = parse_number(word(description, 3))) %>%
group_by(site) %>%
mutate(adj = n / sum(n) / 3 * density) %>%
ggplot(aes(size, adj, fill = description)) +
geom_col() +
facet_wrap(~site, ncol = 1)