2014-02-18 154 views
11

enter image description hereR中的部分颜色直方图

我有一个直方图,如图所示。我希望两个地区的酒吧分别涂成红色和绿色,即从左到右的第一个黑色边框的酒吧应为红色,第二个区域的酒吧应为绿色。 这可以在R中完成吗? 用于获取直方图的代码是

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

回答

19

要做到这一点,最好的方法是让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

您只需在直方图对象上调用'plot',而不是再次调用数据上的'hist'。 – Spacedman

+0

@Spacedman好点。更新。 – Thomas

+0

不,你需要做'plot(h,.....)'而不是'hist(h,....)'。看到我的答案。 – Spacedman

1

试试这个:

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

您可能需要调整重复次数为每种颜色取决于直方图内断线次数。

+0

或者使用plot = FALSE调用hist,然后计算返回断点处的颜色。然后用col参数进行绘图。 – Spacedman

11

这是我在评论中提到的方法:(!你应该在你的问题做到这一点)

做一些测试数据

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解决方案也可用。