2015-08-05 6 views
1

У меня есть проблемы с группировкой баров моей гистограммы.ggplot2 Группировка гистограмм

Это является частью набора данных:

data <- structure(list(Color = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("blue", "red"), class = "factor"), 
         Group = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("Group1", "Group2", "Group3"), class = "factor"), 
         ID = structure(1:8, .Label = c("A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"), class = "factor"), 
         Value = c(194L, 1446L, 0L, 17L, 77L, 2565L, 223L, 61L)), 
        .Names = c("Color", "Group", "ID", "Value"), class = "data.frame", row.names = c(NA, -8L)) 

Я строй гистограммы следующим образом:

ggplot(data, aes(ID, Value)) + geom_bar(aes(fill = Color), position = "dodge", stat="identity") + scale_fill_manual(values=c("Blue", "Red")) 

Теперь я группа бары гистограммы переменной группы, но я нашел его невозможно с помощью facet_wrap:

ggplot(data, aes(ID, Value)) + geom_bar(aes(fill = Color), position = "dodge", stat="identity") + scale_fill_manual(values=c("Blue", "Red")) + facet_wrap(. ~ Group) 

Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting.

Было бы так же хорошо, если бы группы были отделены друг от друга.

Как я могу это сделать? Кто-то может мне помочь?

+0

Избавьтесь от в '' .' в facet_wrap', правильный код: 'facet_wrap (~ Group)' – Jaap

+0

Я попытался с и без них. но это ни в коем случае не работает – Valentina

+0

К сожалению, это опечатка – Valentina

ответ

4

Вы должны удалить .:

ggplot(data, aes(ID, Value)) + 
    geom_bar(aes(fill = Color), position = "dodge", stat="identity") + 
    scale_fill_manual(values=c("Blue", "Red")) + 
    facet_wrap(~ Group) 

это даст вам следующий сюжет:

enter image description here

Если вы хотите, чтобы улучшить сюжет, включить в facet_wrap части scales = "free_x". Это избавиться от ненужных значений на оси х:

ggplot(data, aes(ID, Value)) + 
    geom_bar(aes(fill = Color), position = "dodge", stat="identity") + 
    scale_fill_manual(values=c("Blue", "Red")) + 
    facet_wrap(~ Group, scales = "free_x") 

это даст вам:

enter image description here

Если вы хотите бруски одинаковой ширины, то лучше использовать space аргумент в facet_grid:

ggplot(data, aes(ID, Value)) + 
    geom_bar(aes(fill = Color), position = "dodge", stat="identity") + 
    scale_fill_manual(values=c("Blue", "Red")) + 
    facet_grid(. ~ Group, scales = "free_x", space = "free_x") 

это дает:

enter image description here

+0

Благодаря вам и @Heroka я, наконец, украсил гистограмму. Теперь возникает новая проблема, могу ли я иметь только интересующую часть оси x в каждой грани? – Valentina

+0

@ Valentina Что вы имеете в виду с заинтересованными частями? Если я правильно вас понимаю, второй и третий варианты в моем ответе дадут вам это. – Jaap

+0

С facet_grid (. ~ Group, scale = "free_x", space = "free_x") это сработало! Извините за неприятности. Большое спасибо!!! – Valentina

Смежные вопросы