如何创建在不同年GGPLOT2一个分类变量柱状图?

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

我有其中在第一列中的每一行代表与数字的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不需要在输出。

r dataframe ggplot2 plot geom-bar
2个回答
2
投票

在ggplot绘制多个列的方式是,首先将数据转换为多头形态,可与tidyr::gather完成。然后你映射它来自柱(现在存储在“年”列),以一个美观,计数到另一个(geom_bar通过计算行数可以实现这个要求)。

library(tidyverse);  
ggplot(data = example %>%
         gather(year, type, -id)) +
  geom_bar(aes(x = year, fill = type), position = "dodge")

enter image description here

(请注意,我改变了例子,使不同年份有不同的计数。否则,它不太清楚,看看它的工作。)

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")

0
投票

类似以前的答案,但使用dplyr::countgeom_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")
© www.soinside.com 2019 - 2024. All rights reserved.