2016-05-16 4 views
5

Это похоже на простейшую вещь, но я не смог понять это на R. Для описательных целей я хочу создать один гистограммный график, который показывает средние значения и графики ошибок нескольких вопросы/переменные. Мои данные основаны на анонимных ответах, поэтому нет переменных группировки.Штриховая диаграмма без группировки переменной

Есть ли способ сделать это на R? Ниже приведен пример того, как выглядят мои данные. Я хотел бы построить среднее и стандартное отклонение каждой переменной рядом друг с другом в одной и той же гистограмме.

dat <- data.frame(satisfaction = c(1, 2, 3, 4), 
        engaged = c(2, 3, 4, 2), 
        relevant = c(4, 1, 3, 2), 
        recommend = c(4, 1, 3, 3)) 
+2

Если вы можете найти значения, которые вы хотите построить, вы можете построить их , Как есть, самое большее, что мы можем сделать, чтобы ответить на ваш вопрос, это сказать «да» --- что никому не полезно, поэтому мы, вероятно, закроем ваш вопрос. Однако, если вы [сделаете воспроизводимый пример] (http://stackoverflow.com/q/5963269/903061), поделитесь небольшими образцами данных - либо имитируемыми, либо с помощью 'dput()', так что это копирование/вставка и описание вы хотите, кто-то, вероятно, поделится некоторым кодом, чтобы показать вам, как это сделать. – Gregor

+0

Пожалуйста, ознакомьтесь с ссылкой, которую я опубликовал выше, о создании воспроизводимых примеров и поделиться своими данными в дружественном формате, как предлагается - либо имитируемым, либо через 'dput()'. Изображение данных рядом с бесполезным. – Gregor

+0

Спасибо, Грегор. Я добавил имитированный набор данных в свой первоначальный пост. Этого достаточно? –

ответ

8

Что вы можете сделать, это изменить данные в длинный формат с reshape2 (или data.table или tidyr) без указания идентификатора переменного и использовать все столбцы в качестве переменных измерения. После этого вы можете создать график, например, ggplot2. Использование:

library(reshape2) 
library(ggplot2) 

# reshape into long format 
dat2 <- melt(dat, measure.vars = 1:4) # or just: melt(dat) 

# create the plot 
ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'bar', fun.y = 'mean', width = 0.7, fill = 'grey') + 
    stat_summary(geom = 'errorbar', width = 0.2, size = 1.5) + 
    theme_minimal(base_size = 14) + 
    theme(axis.title = element_blank()) 

дает:

enter image description here


Update: Как @GavinSimpson отметил в своем ответе: для наглядного средства и стандартные ошибки, определение barplot не является лучшей альтернативой , В качестве альтернативы вы можете использовать geom_pointrange:

ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'pointrange', fatten = 5, size = 1.2) + 
    theme_minimal(base_size = 14) + 
    theme(axis.title = element_blank()) 

, который дает:

enter image description here

+1

Отлично. Спасибо огромное! Это было очень полезно! –

1

Хотя я знаю, что вы попросили barplot, dotplot данных является альтернативой визуализации, которая фокусируется на средства и стандартные ошибки. Если чертеж бара до 0 не является информативным, то точка-точка является хорошей альтернативой.

Повторное использование объектов и кода от ответа @Procrastinatus Максимуса мы имеем:

ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'point', fun.y = 'mean', size = 2) + 
    stat_summary(geom = 'errorbar', width = 0.2) + 
    xlab(NULL) + 
    theme_bw() 

который производит

enter image description here

+1

Полностью верно о точке визуализации средств и стандартных ошибок! – Jaap

+0

В [твиттере] есть «мем» (https://twitter.com/chbergma/status/709361543767580672), а также научная литература [[1] (http://journals.plos.org/plosbiology/article ? id = 10.1371/journal.pbio.1002128)] об использовании стрижек (и усов). –

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