微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用频率数据按两个条件堆叠条形图

如何解决使用频率数据按两个条件堆叠条形图

我是 R 新手,正在尝试使用频率数据创建堆叠的 barplot。对不起,如果之前有人问过类似的问题,但我不明白!

示例数据:

          burn dist perc_bg perc_moss perc_litter
 Site 1   b     0   0.6      0.4      0.0
 Site 1   b     3   0.2      0.7      0.1
 Site 1   b    10   0.3      0.4      0.3
 Site 2   u     0   0.7      0.2      0.1
 Site 2   u     3   0.4      0.3      0.3 
 Site 2   u    10   0.1      0.2      0.7
 Site 3   b     0   0.2      0.4      0.4
 Site 3   b     3   0.3      0.6      0.1
 Site 3   b    10   0.2      0.3      0.5
 Site 4   u     0   0.7      0.2      0.1
 Site 4   u     3   0.5      0.4      0.1
 Site 4   u    10   0.3      0.2      0.5

我想按距离和燃烧创建堆积条形图(3 个堆积条形图,fill=cover 类型 (perc_bg,perc_moss,perc_litter)0,3,10 距离燃烧 (b) 和 3 个堆积条形 0,10 {1}} 距离未燃烧 (u)。所以我需要按燃烧区分组的每个距离计算每种覆盖类型的平均频率,我迷路了。任何帮助将不胜感激。

解决方法

这是一个 tidyverse 解决方案,我建议您访问该链接以获取更多信息。

假设您的数据是一个名为 mydata 的数据框,并且站点位于名为 site 的列中(有关我如何制作数据示例的信息,请参见问题结尾)。

如果需要,使用 install.packages('tidyverse') 安装软件包并加载:

library(dplyr)
library(tidyr)
library(ggplot2)

现在的第一个问题是您的封面类型为 3 列(“宽”格式),而您需要“长”格式 - 一列用于类型,一列用于值。您可以使用 tidyr::pivot_longer()

mydata %>% 
  pivot_longer(cols = 4:6,names_to = "cover_type")

运行并注意结果。请注意使用管道 - %>% - 通过一系列步骤传递数据。

您可能想要删除 perc_ 前缀,并将 dist 转换为类别(R 中的因子),因为条形图有一个分类 x 轴。为此使用 dplyr::mutate()

mydata %>% 
  pivot_longer(cols = 4:6,names_to = "cover_type") %>% 
  mutate(cover_type = gsub("perc_","",cover_type),dist = factor(dist))

再次运行并注意结果。

最后我们可以将数据传递给ggplot。我们要绘制 valuedist 的关系图,由 cover_type 填充,并由 burn 填充 facet(并排的单独图)。使用 position_fill 求和为 1。

mydata %>% 
  pivot_longer(cols = 4:6,dist = factor(dist)) %>% 
  ggplot(aes(dist,value)) + 
  geom_col(aes(fill = cover_type),position = position_fill()) + 
  facet_wrap(~burn) +
  labs(title = "Cover type by distance and burn")

结果。这只是基础知识,有很多方法可以自定义情节。

enter image description here

数据:

mydata <- read.table(text = "site burn dist perc_bg perc_moss perc_litter
 'Site 1'   b     0   0.6      0.4      0.0
 'Site 1'   b     3   0.2      0.7      0.1
 'Site 1'   b    10   0.3      0.4      0.3
 'Site 2'   u     0   0.7      0.2      0.1
 'Site 2'   u     3   0.4      0.3      0.3 
 'Site 2'   u    10   0.1      0.2      0.7
 'Site 3'   b     0   0.2      0.4      0.4
 'Site 3'   b     3   0.3      0.6      0.1
 'Site 3'   b    10   0.2      0.3      0.5
 'Site 4'   u     0   0.7      0.2      0.1
 'Site 4'   u     3   0.5      0.4      0.1
 'Site 4'   u    10   0.3      0.2      0.5",header = TRUE)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。