Как сделать одну гистограмму из сгруппированных столбцов в R

У меня есть следующий набор данных:

year    type      count
1560    Person    2
1560    Public    1
1560    Thing     1
1578    Academic  1
1578    Public    1
1578    Thing     1
1582    Person    3
1582    Public    3
1582    Thing     3
...

Моя цель состоит в том, чтобы построить этот набор данных в виде трех разноцветных гистограмм на одном графике относительно группы / типа. Ось X должна представлять год, в то время как должно быть четыре ячейки (по одной для каждого типа [Персона / Общественность / Вещи / Академическая] для каждого года, представляющих счет для этой группы).

На данный момент у меня есть следующий код R:

dat <- read.csv(
    file = filename
    ,header = T
    ,sep = "\t"
    ,quote = "\""
    ,row.names = NULL
    ,fileEncoding = "UTF8"
    ,stringsAsFactors = F);

melt_df <- melt(dat, id.vars = c("year","type"), measure.vars = c("count"));

ggplot(melt_df, aes(x = year, y = value, fill = variable)) +
    geom_bar(stat = 'summary', fun.y = sum) +
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
    scale_y_continuous(limits=c(0,155),     breaks=seq(0,155,5)) +
    scale_x_continuous(limits=c(1550,2000), breaks=seq(1550,2000,10));

Это приводит к следующему графику: ggplot из набора данных выше

Кто-нибудь может указать мне правильное направление, как это сделать?

Пожалуйста, не предлагайте переупорядочивать набор данных следующим образом:

year    Person  Public  Thing  Academic
1560    2       1       1      0
...

Конечно, я могу построить этот набор данных без проблем, но это не тот формат, которого я могу ожидать, поэтому было бы неплохо поработать с набором данных выше.

1 ответ

Решение

Просто делай

ggplot(d, aes(factor(year), count, fill = type)) + 
   geom_col(position = "dodge")

данные

d <- read.table(text="year    type      count
1560    Person    2
                1560    Public    1
                1560    Thing     1
                1578    Academic  1
                1578    Public    1
                1578    Thing     1
                1582    Person    3
                1582    Public    3
                1582    Thing     3", header=T)
Другие вопросы по тегам