【问题标题】:Change histogram bar colours greater than a certain value更改大于某个值的直方图条颜色
【发布时间】:2011-10-25 00:59:53
【问题描述】:

到目前为止,我已经设法按照示例 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);

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

【问题讨论】:

    标签: r histogram


    【解决方案1】:

    从根本上说,您希望在test 上而不是在cuts 上使用逻辑选择器。

    您的剪切对象如下所示:

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

    【讨论】:

    • +1 这是一个可爱的图表!这也适用于可变宽度的箱子吗?例如当使用hist(test, breaks=c(-3,-2,-1,0,0.5,1,1.5,2,2.5,3)
    • @AssadEbrahim 谢谢。 ggplot2 是 purdy。应该能够制作可变宽度的垃圾箱,但您可能需要自己的问题来弄清楚如何:-)
    • 还不错:)(purdy?)
    • @AssadEbrahim 这是我的话,我会坚持下去。
    • 有趣的是,上下文如何使一切变得不同。专注于技术位而不是拿起你的轻音,我认为 purdy 是我以前从未听过的技术术语。现在重读,一切都变得purdy清晰了;)(对于那些不熟悉美国休闲成语的人来说,“漂亮”)
    【解决方案2】:

    更改您的颜色矢量clr,使其在条形大于 1 时显示红色,否则显示灰色。

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

    然后像以前一样绘制。

    【讨论】:

    • 如果你有时间,值得学习 ggplot 并更喜欢 gsk 的答案。基本的hist 函数很难做得漂亮。
    • 会的。感谢您为 hist 指明正确的方向。
    • ggplot 渲染缓慢,并且文档很差(geom="histogram" 特定的选项记录在哪里?)
    • @user1244215:?geom_histogram 页面上的示例非常详尽。但是阅读 ggplot2 的书可以说是掌握语法的最佳方法。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2021-12-25
    • 2022-08-15
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2018-12-30
    相关资源
    最近更新 更多