更改直方图条颜色大于某个值

Mat*_*eck 13 r histogram

到目前为止,我已经成功地改变颜色直方图单杆下面的例子在这里

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

我希望能够更改高于某个x轴值的直方图箱的颜色 - 例如,在示例中的分布函数中高于1.我遇到麻烦的部分原因是我并不完全理解cut()返回的因素.

Ari*_*man 8

从根本上说,你想要一个test不在cuts 上的逻辑选择器.

这是你的剪切对象的样子:

> bks <- cut(test,10)
Run Code Online (Sandbox Code Playgroud)

级别是字符类型:

等级(bks) 1 "(-2.53,-2.01]""( - 2.0,-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
Run Code Online (Sandbox Code Playgroud)

这是使用ggplot2的解决方案,而不是手工制作切割等等:

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

ggplot2 histo


Ric*_*ton 7

更改颜色矢量,clr以便在条形图大于1时显示红色,否则显示灰色.

clr <- ifelse(h$breaks < 1, "grey", "red")[-length(h$breaks)]
Run Code Online (Sandbox Code Playgroud)

然后像以前一样绘图.