我有其中在第一列中的每一行代表与数字的ID的非常大的数据帧。其它行有一个分类变量,可以是两种类型的(在这个例子中,A或B),每一年的。下面是一个简化的数据帧作为一个例子:
id var2017 var2018 var2019
1 A B A
2 B A A
3 B A B
4 A A A
5 A B B
我想创建一个包含每种类型(A和B),每年的数量柱状图,与酒吧被按类型分组。我是新的有R语言,所以我试图创建单独的年积,工作正常,具体如下:
graph <– ggplot(data = example) +
geom_bar(aes(x = var2017))
问题是我不知道如何把它们放在一起。如何创建在与Y轴的所有类型,每年在X轴是一个阴谋,计数? ID不需要在输出。
在ggplot绘制多个列的方式是,首先将数据转换为多头形态,可与tidyr::gather
完成。然后你映射它来自柱(现在存储在“年”列),以一个美观,计数到另一个(geom_bar
通过计算行数可以实现这个要求)。
library(tidyverse);
ggplot(data = example %>%
gather(year, type, -id)) +
geom_bar(aes(x = year, fill = type), position = "dodge")
(请注意,我改变了例子,使不同年份有不同的计数。否则,它不太清楚,看看它的工作。)
example <- read.table(
header = T,
stringsAsFactors = F,
text = "id var2017 var2018 var2019
1 A B A
2 B A A
3 B A B
4 B A A # var2017 A changed to B
5 A B B")
类似以前的答案,但使用dplyr::count
,geom_col
和清晰的语法管道:
library(ggplot2)
library(tidyr)
library(dplyr)
example %>%
gather(Var, Val, -id) %>%
count(Var, Val) %>%
ggplot(aes(Var, n)) +
geom_col(aes(fill = Val),
position = "dodge")