2016-07-05 4 views
2

Недавно я научился составлять планку с ошибками, используя stat_summary, как показано ниже.ggplot2 bar plot с несколькими категориальными переменными с одинаковыми уровнями

library(ggplot2) 
posn.d <- position_dodge(1.82) 
ggplot(mtcars, aes(x=cyl, y=wt, col = factor(am), fill = factor(am)))+ 
     stat_summary(fun.y = mean, geom = "bar", position = posn.d)+ 
     stat_summary(fun.data = mean_se, fun.args = list(mult = 1), geom = "errorbar", width = 0.1, position =posn.d) 

enter image description here

Но то, что я хочу сделать несколько иначе. Существует более двух переменных для категории групп с одинаковыми уровнями.

(например, группа: "Вариант А", "Вариант B", "Вариант C"

уровни

для каждой группы:. 0, 1)

Пример данные:

mtcars$OptionA=sample(0:1, 32, replace = T) 
mtcars$OptionB=sample(0:1, 32, replace = T) 
mtcars$OptionC=sample(0:1, 32, replace = T) 
mtcars 

Я хотел бы сделать сюжет так: enter image description here

Могу ли я сделать сюжет, как это с R? Любая помощь будет замечательной. Спасибо :)

ответ

0

Думаю, вам нужно подготовить свои данные перед графикой. Конкретно, поскольку OptionA, OptionB и OptionC имеют одинаковые значения, вы можете создать переменную option, которая объединяет их все, а затем создает переменную value со всеми возможными значениями (0 или 1). Переведенный в коде может быть что-то вроде этого:

library(dplyr) 
library(tidyr) 

test = mtcars %>% select(mpg, OptionA:OptionC) 

#present your test in long format 
test_long <- gather(test, option, value, OptionA:OptionC) 

> head(test_long) 
    mpg option value 
1 21.0 OptionA  0 
2 21.0 OptionA  0 
3 22.8 OptionA  0 
4 21.4 OptionA  0 
5 18.7 OptionA  0 
6 18.1 OptionA  1 

Тогда вы можете создать bar_plot представления mpg и option и заполнение value

#plot 
a = ggplot(test_long, aes(option, mpg, fill = value)) + 
    geom_bar(position = "dodge", stat="identity") 
a 

Выход: enter image description here

Я надеюсь, что это помогает.

+1

Большое спасибо. Это очень помогло! :) – Amy

+0

@ Ами, пожалуйста. Я думаю, вы можете легко добавить 'stat_summary' в код выше. – Edu

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