Изменить цвета гистограммы больше определенного значения - PullRequest
13 голосов
/ 11 августа 2011

Пока мне удалось изменить цвет одной гистограммы, следуя примеру здесь

test <- rnorm(100);
h <- hist(test);
b <- cut(1, h$breaks);
clr <- rep("grey", length(h$counts));
clr[b] <- "red";
plot(h, col=clr);

Я хочу иметь возможность изменять цвет столбцов гистограммы, которые превышают определенное значение оси X - например, которые выше 1 в функции распределения в примере. Одна из причин, по которой у меня возникают проблемы, заключается в том, что я не совсем понимаю фактор, который возвращает cut().

Ответы [ 2 ]

8 голосов
/ 11 августа 2011

По сути, вы хотите, чтобы логический селектор был на test, а не на cut s.

Вот как выглядит ваш вырезанный объект:

> bks <- cut(test,10)

Уровни имеют тип символов:

уровни (БКС) 1 "(-2,53, -2,01]" "(-2,01, -1,5]" "(-1,5, -0,978]" "(-0,978, -0,459]" [5] "(-0,459,0.0596]" "(0,0596, 0.578] "" (0.578,1.1] "" (1.1,1.62] "
[9]" (1.62,2.13] "" (2.13,2.65] "

Данныечислового типа:

> head(as.numeric(bks))
[1] 5 6 6 6 3 5

Вот решение, использующее ggplot2 вместо того, чтобы делать разрезы и т. д. вручную:

test <- rnorm(100)
dat <- data.frame( x=test, above=test>1 )
library(ggplot2)
qplot(x,data=dat,geom="histogram",fill=above)

ggplot2 histo

7 голосов
/ 11 августа 2011

Измените свой цветовой вектор, clr, чтобы он отображался красным, когда полоса больше 1, и серым, в противном случае.

clr <- ifelse(h$breaks < 1, "grey", "red")[-length(h$breaks)]

Затем строите график, как раньше.

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