Как определить цвета заливки в гистограмме ggplot? - PullRequest
8 голосов
/ 30 марта 2010

У меня есть следующие простые данные

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")

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

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

Ответы [ 3 ]

14 голосов
/ 30 марта 2010

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

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()
0 голосов
/ 30 марта 2010

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

0 голосов
/ 30 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...