超过某个值的直方图条形颜色更改

14

迄今为止,我已经根据这里的示例成功地更改了直方图中单个条形的颜色。

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

基本上,您需要在 test 上使用逻辑选择器,而不是在 cut 上使用。

以下是您的 cut 对象的外观:

> bks <- cut(test,10)

这些等级是字符类型:

levels(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


+1 这是一个漂亮的图表!这对于可变宽度的箱子也适用吗?例如,当使用 hist(test, breaks=c(-3,-2,-1,0,0.5,1,1.5,2,2.5,3) 时。 - Assad Ebrahim
@AssadEbrahim 谢谢。ggplot2很漂亮。应该能够制作可变宽度的条形图,但你可能需要自己提问来解决 :-) - Ari B. Friedman
好的,没问题 :) (漂亮?) - Assad Ebrahim
@AssadEbrahim 那是我的话,我会坚持这个观点。 - Ari B. Friedman
1
有趣的是,上下文决定一切。当我专注于技术细节而没有注意到你轻松的语气时,我以为“purdy”是一个我从未听说过的技术术语。现在重新阅读,一切变得相当“清晰明了”(对于不熟悉美国非正式用语的人来说,“purdy”意为“pretty”)。 - Assad Ebrahim
如果你想更加简洁,可以将测试代码放入ggplot2代码中:qplot(x, data = dat, geom = "histogram", fill = test > 1) - Alex Trueman

8

更改颜色向量clr,使其在柱状图大于1时显示红色,否则显示灰色。

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

然后像之前一样绘制图表。

1
如果你有时间的话,学习ggplot是值得的,并且建议优先选择gsk的答案。基础的hist函数很难让图形变得漂亮。 - Richie Cotton
好的。谢谢你指引我正确地处理hist的事情。 - MattLBeck
ggplot渲染速度慢,文档质量差(geom="histogram"特定选项的文档在哪里?) - user1244215
@user1244215:?geom_histogram页面上的示例非常详细。但是阅读ggplot2书籍无疑是掌握语法的最佳方式。 - Richie Cotton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接