R中的部分颜色直方图

时间:2014-02-18 15:37:11

标签: r colors histogram

enter image description here

我有一个直方图,如图所示。我希望两个区域中的条纹分别用红色和绿色着色,即从0到左边第一个黑色边框的条纹应该用红色标记,第二个区域用条纹用绿色标记。 这可以在R中完成吗? 用于获取直方图的代码是

hist(pr4$x[pr4$x[,1]>-2,1],breaks=100)

4 个答案:

答案 0 :(得分:24)

执行此操作的最佳方法是允许hist为您进行计算,然后再次使用hist进行实际绘图。这是一个例子:

set.seed(1)
x <- rnorm(1000)
h <- hist(rnorm(1000), breaks=50, plot=FALSE)
cuts <- cut(h$breaks, c(-Inf,-.5,1.75,Inf))
plot(h, col=cuts)

最后一行中的.5和1.75是您想要使用不同颜色的阈值。

注意:我的原始答案使用了barplot,但该策略使得这些轴难以使用。

结果如下:

enter image description here

答案 1 :(得分:16)

以下是我在评论中提到的方法:

制作一些测试数据(你应该在你的问题中做到这一点!)

test = runif(10000,-2,0)

得到R来计算直方图但不绘制它:

h = hist(test, breaks=100,plot=FALSE)

您的直方图分为三个部分:

ccat = cut(h$breaks, c(-Inf, -0.6, -0.4, Inf))

使用此调色板绘制,将因子隐式转换为数字索引调色板:

plot(h, col=c("white","green","red")[ccat])

coloured bars

ggplot2解决方案也可用。

答案 2 :(得分:1)

试试这个:

hist(pr4$x[pr4$x[,1]>-2,1],breaks=100, col = c(rep("white", 69), rep("green", 15), rep("red", 16)))

您可能需要根据直方图中的断点数调整每种颜色的重复次数。

答案 3 :(得分:0)

我使用@Thomas的解决方案已有多年,直到我发现它是不精确的。

在下面的示例中,我遵循接受的答案。

fake_data <- c(0.35, 0.41, 0.41, 0.49, 0.49, 0.49, 0.51, 0.51, 0.59, 0.64, 0.7)

fake_hist <- hist(fake_data, plot = F)
fake_cuts <- cut(fake_hist$breaks, c(-Inf, 0.5, Inf))

plot(fake_hist, col = fake_cuts)

[wrong_hist][1]

剪切的目标是0.5,但是第三个条是黑色的,尽管它应该是红色的。原因是,中断包含所有边界,包括第一个小节的左边界,这意味着有n + 1个值,其中n是直方图中的小节数。对于n条的着色,只需要正确的边界即可,因此我们必须排除第一个值。

fake_data <- c(0.35, 0.41, 0.41, 0.49, 0.49, 0.49, 0.51, 0.51, 0.59, 0.64, 0.7)

fake_hist <- hist(fake_data, plot = F)
fake_cuts <- cut(fake_hist$breaks[-1], c(-Inf, 0.5, Inf))

plot(fake_hist, col = fake_cuts)

correct_hist

在预期的位置产生分色。

我将其发布在这里是因为我花了很长时间才发现有问题。