如何根据定量变量绘制分类变量的频率

问题描述 投票:0回答:1

我需要你的帮助来解决一个小问题。对于硕士项目,我需要根据年龄(以天为单位)绘制鸟类行为的频率。 不幸的是,我无法提供所有数据,因为它是机密的,但我可以给你我正在尝试做的例子:

  • 我有 7 种不同类型的行为:活跃、进食等...
  • 我有一个被标记的个体池,并且我有年龄范围从 0 到 1500 天的数据(根据标记日期)。

我需要做的是看看对于给定的年龄,某种行为是否会更频繁,并将其绘制出来。

我尝试了几种不同的方法,比如我在网站上找到的这个方法: 首先,我尝试计算每个年龄段的行为频率:

 df %>%
 group_by(agesincetaggingdays, behaviors) %>%
 summarise(n = n()) %>%
 mutate(freq = n / sum(n))

这给了我:

 agesincetaggingdays behaviors     n     freq
             <dbl> <chr>     <int>    <dbl>
  1                   0 Active        5 0.000410
  2                   0 Feeding      49 0.0724 

基本上,输出给了我所有个体中每个年龄段的行为频率。

现在我想知道如何提取这些频率并用它为每种行为绘制图表。 我再次举我之前的例子:

如果我想根据年龄查看鸟类的活跃程度,我必须提取所有年龄段活跃行为的所有频率,然后在 y 轴上绘制行为频率,在 x 轴上绘制年龄.

有办法做到这一点吗?如果您想要更精确,请不要犹豫。

谢谢你!

r ggplot2 plot dplyr frequency
1个回答
0
投票

如果我理解正确的话,则无需提取任何内容 - 您使用的代码已经为您提供了一个数据框,可以将其传递给

ggplot()
来绘制图表。

我创建了一些虚拟数据来说明工作流程。当然,您可能想选择适合您需求的绘图类型(我使用下面的堆积面积图)。

library(tidyverse)

# create sample data
df <- tibble(
  behavior = sample(letters[1:5], size = 1e6, replace = TRUE),
  age = sample(0:1500, size = 1e6, replace = TRUE)
)

# compute shares
df <- df |> 
  count(age, behavior) |> 
  mutate(share = n / sum(n),
         .by = age)

# plot
ggplot(df) +
  geom_area(aes(age, share, fill = behavior))

创建于 2023-10-21,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.