Подтвердить что ты не робот

Изменение цветов гистограммы больше определенного значения

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

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().

4b9b3361

Ответ 1

В основном вам нужен логический селектор на test, а не на cut s.

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

> bks <- cut(test,10)

Уровни имеют характер типа:

Уровни (BKS)      1 "(-2.53, -2.01)" "(-2.01, -1.5]" "(-1.5, -0.978)" "(- 0,978, -0,459]"      [5] "(-0,459,0,0596)" "(0,0596,0578)" "(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

Ответ 2

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

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

Затем зарисуйте как раньше.