2015-12-02 2 views
0

У меня есть простой набор данных, который выглядит следующим образом:плотности гистограмма для порядкового фактора с использованием ggplot2

school  score  grade subject 
Your school 83.27  1  English 
All schools 113.60  6  English 

сорт является порядковым фактор с 9 уровней, школа является фактором с 2-х уровнях.

'data.frame': 12762 obs. of 4 variables: 
$ school : Factor w/ 2 levels "Your school",..: 1 2 2 2 2 2 2 2 2 2 ... 
$ score : num 83.3 113.6 109.2 117.4 100.3 ... 
$ grade : Ord.factor w/ 9 levels "1"<"2"<"3"<"4"<..: 1 6 6 7 4 3 6 1 6 6 ... 
$ subject: chr "English" "English" "English" "English" ... 

Я хотел бы построить грань гистограммы с ggplot2, используя функцию плотности. Если бы я попробовать его без плотности я получаю это:

p <- ggplot(ss, aes(x=grade)) 
p <- p + geom_histogram() 
p <- p + facet_wrap(~school) 

enter image description here

Когда я добавляю плотность нормализовать ось у меня этот:

p <- ggplot(ss, aes(x=grade)) 
p <- p + geom_histogram(aes(y=..density..)) 
p <- p + facet_wrap(~school) 

enter image description here

Что я пропал без вести?

+1

Не могли бы вы предоставить 'str (ss)'? –

+0

'data.frame': \t 12762 obs. из 4 переменных: $ школа: коэффициент с 2 уровнями «Ваша школа», ..: 1 2 2 2 2 2 2 2 2 2 ... $ оценка: нет 83.3 113.6 109.2 117.4 100.3 ... $ grade : Ord.factor w/9 levels "1" <"2" <"3" <"4" <.: 1 6 6 7 4 3 6 1 6 6 ... $ subject: chr "English" "English "" Английский "" Английский "... –

+0

@Heroka Это уже есть. –

ответ

3

R не может рассчитывать плотность на коэффициент, даже при заказе. Лучше всего было бы преобразовать grade в числовой (используя, например, as.numeric(as.character(x))).

xy <- data.frame(school = sample(c("your", "all"), size = 100, replace = TRUE), 
        grade = sample(1:10, size = 100, replace = TRUE)) 
xy$grade.factor <- factor(xy$grade, ordered = TRUE) 

library(ggplot2) 

# doesn't work for factors 
ggplot(xy, aes(x = grade.factor)) + 
    theme_bw() + 
    geom_histogram(aes(y = ..density..)) + 
    facet_wrap(~ school) 

# works for integers/numeric 
ggplot(xy, aes(x = grade)) + 
    theme_bw() + 
    geom_histogram(aes(y = ..density..)) + 
    facet_wrap(~ school) 
Смежные вопросы