如何解决使用频率数据按两个条件堆叠条形图
我是 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
。我们要绘制 value
与 dist
的关系图,由 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")
结果。这只是基础知识,有很多方法可以自定义情节。
数据:
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 举报,一经查实,本站将立刻删除。