我想创建一个条形图,以显示3个不同生命周期中的错误数量。对于每个日期(x),我想要三个代表nr的小节。每个生命阶段中的个体数量。
我来自原始数据的数据帧看起来像这样(简化示例):
# create dataframe
date <- c("01/02/2018","14/02/2018","20/02/2018","03/03/2018","15/03/2018")
adult <- c(5,2,3,1,1)
larvae <- c(6,5,9,7,12)
nymph <- c(4,4,8,13,10)
df <- data.frame(date,adult,larvae,nymph)
date adult larvae nymph
1 01/02/2018 5 6 4
2 14/02/2018 2 5 4
3 20/02/2018 3 9 8
4 03/03/2018 1 7 13
5 15/03/2018 1 12 10
我知道如何使用ggplot进行绘制的唯一方法是将变量转换为新变量(例如lifestage
)的因子水平,并将所有计数放入变量counts
中。 / p>
该数据框如下所示:
df2
date stage counts
1 01/02/2018 adult 5
2 14/02/2018 adult 2
3 20/02/2018 adult 3
4 03/03/2018 adult 1
5 15/03/2018 adult 1
6 01/02/2018 larvae 6
7 14/02/2018 larvae 5
8 20/02/2018 larvae 9
9 03/03/2018 larvae 7
10 15/03/2018 larvae 12
11 01/02/2018 nymph 4
12 14/02/2018 nymph 4
13 20/02/2018 nymph 8
14 03/03/2018 nymph 13
15 15/03/2018 nymph 1
绘制此df很容易:
ggplot(df2, aes(date, counts, fill=stage)) +
geom_col(position = "dodge")
要从df转换为df2,我有相当大的解决方法,包括提取列,使用rep("stagename",x)
创建新向量并将其添加到数据帧,rbind()
整个数据帧乘以我要转换的变量的nr进入因子水平等。(我注意到我以前曾经使用过几种方法,但是都用了很长时间)。
所以我有2个问题:
1)有没有一种快速的方法可以将不同的变量转化为因数 一个新变量的水平?我说的是一个大数据框 还有其他一些需要保留的变量。
2)有没有一种方法可以获取相同类型的barplot 从数据帧转换过来?
我正在尝试类似的方法,但这当然是不正确的:
ggplot(data=df) +
geom_col(aes(x=date,y=adult),fill="blue") +
geom_col(aes(x=date,y=nymph),fill="green") +
geom_col(aes(x=date,y=larvae),fill="yellow")
我已经搜索了类似的问题,但似乎找不到像我一样的问题。我的方法也是双重的:如果我不做转换就可以制作ggplot,那就更好了。
我最近发现了tidyverse
包,并认为可以在其中找到转换的解决方案,但是我还没有遇到任何可以使我进行这种快速转换的东西。
如果可能的话,我希望使用该软件包的任何解决方案。
答案 0 :(得分:4)
library(tidyverse)
df %>%
gather(stage, counts, -date) %>%
ggplot(aes(date, counts, fill = stage)) +
geom_col(position = "dodge")
应该这样做吗?