2011-08-11 32 views
13

到目前为止,我已经成功地改变颜色直方图单杆下面的例子here变化柱状图条的颜色大于一定值

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

我希望能够改变颜色直方图bin超过某个x轴值 - 例如在示例中的分配函数中大于1。我遇到麻烦的部分原因是我不完全了解cut()返回的因素。

回答

8

从根本上说你想在test不上cut个合乎逻辑的选择。

这是你砍的对象是什么样子:

> 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,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

+0

+1这是一个可爱的图表!这是否适用于可变宽度的垃圾箱?例如当使用'hist(test,breaks = c(-3,-2,-1,0,0.5,1,1.5,2,2.5,3)' –

+0

@AssadEbrahim谢谢。ggplot2是purdy。应该能够使变量-width箱,但你可能需要你自己的问题弄清楚如何:-) –

+0

足够公平:)(普尔蒂?) –

7

更改颜色矢量,clr,所以只要条大于1就显示红色,否则显示为灰色。

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

然后像以前一样绘制。

+1

如果你有时间,值得学习ggplot并且喜欢gsk的回答。基本的'hist'功能是一种令人惊艳的痛苦。 –

+0

会做。感谢您指出我正确的方向为hist。 – MattLBeck

+0

ggplot呈现缓慢,具有较差的文档(如特定于GEOM =“直方图”记录的选项?) – user1244215