2010-03-30 4 views
8

У меня есть следующие простые данныеКак определить цвета заливки в гистограмме ggplot?

data <- structure(list(status = c(9, 5, 9, 10, 11, 10, 8, 6, 6, 7, 10, 
10, 7, 11, 11, 7, NA, 9, 11, 9, 10, 8, 9, 10, 7, 11, 9, 10, 9, 
9, 8, 9, 11, 9, 11, 7, 8, 6, 11, 10, 9, 11, 11, 10, 11, 10, 9, 
11, 7, 8, 8, 9, 4, 11, 11, 8, 7, 7, 11, 11, 11, 6, 7, 11, 6, 
10, 10, 9, 10, 10, 8, 8, 10, 4, 8, 5, 8, 7), statusgruppe = c(0, 
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, NA, 0, 1, 0, 1, 
0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0)), .Names = c("status", 
"statusgruppe"), class = "data.frame", row.names = c(NA, -78L 
)) 

из которого я хотел бы сделать гистограмму:

ggplot(data, aes(status))+ 
geom_histogram(aes(y=..density..), 
    binwidth=1, colour = "black", 
    fill="white")+ 
theme_bw()+ 
scale_x_continuous("Staus", breaks=c(min(data$status,na.rm=T), median(data$status, na.rm=T), max(data$status, na.rm=T)),labels=c("Low", "Middle", "High"))+ 
scale_y_continuous("Percent", formatter="percent") 

Теперь - я хотел бы, чтобы бункеры взять Colou в соответствии со значением - например, бункеры со значением> 9 становятся темно-серыми - все остальное должно быть светло-серым.

Я пробовал с fill=statusgruppe, scale_fill_grey(breaks=9) и т. Д. - но я не могу заставить его работать. Есть идеи?

ответ

11

Надеюсь, это должно вам начать:

ggplot(data, aes(status, fill = ..x..))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_gradient(low = "black", high = "white") 

ggplot(data, aes(status, fill = ..x.. > 9))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_grey() 
+1

Спасибо - я изменил легендарную метку так (для потомков) scale_fill_grey («Name», breaks = c (FALSE, TRUE), метки = c («Это», «Это»)). Другой вопрос: - возможно ли сделать что-то вроде ..x ..> 7, ..x ..> 9 (Если я хочу три категории вместо двух?) – Andreas

+1

В этом случае используйте 'cut' , – hadley

+2

Спасибо! - если кто-то еще заинтересован, то это я сделал: fill = cut (.. x .., c (1,6,10))), binwidth = 1, цвет = "черный", ) + scale_fill_grey ( "name", breaks = c ("(1,6]", "(6,10]", NA), labels = c ("Low", "Midle", "High")) + – Andreas

0

Как насчет использования fill=..count.. или fill=I(..count..>9) сразу после y=..density..? Вы должны немного поиграть с легендарным названием и надписями, но он правильно окрашивает.

EDIT:
Кажется, я неправильно понял ваш вопрос. Если вы хотите определить цвет на основе x-координаты, вы можете использовать автоматическую переменную ..x.. аналогично.

+0

Спасибо за хорошие идеи! однако, это не то, что я пытаюсь показать. Я бы хотел, чтобы цвет бин-бара зависел от значения, представленного этим бункером (а не счетчиком). то есть нет бункеров с более чем 9 отсчетами, но со значениями выше 9. Я не думаю, что я могу это объяснить: -/ Возможно, это мои метки на оси, которые меня смущают. Я хотел бы покрасить бункеры справа от метки «средний» – Andreas

0

Что относительно scale_manual? Вот link на сайт Хэдли. Я использовал эту функцию, чтобы установить соответствующий цвет заливки для boxplot. Не уверен, что если он будет работать с гистограммой, хотя ...

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