我有一个直方图,如图所示。我希望两个地区的酒吧分别涂成红色和绿色,即从左到右的第一个黑色边框的酒吧应为红色,第二个区域的酒吧应为绿色。 这可以在R中完成吗? 用于获取直方图的代码是
hist(pr4$x[pr4$x[,1]>-2,1],breaks=100)
我有一个直方图,如图所示。我希望两个地区的酒吧分别涂成红色和绿色,即从左到右的第一个黑色边框的酒吧应为红色,第二个区域的酒吧应为绿色。 这可以在R中完成吗? 用于获取直方图的代码是
hist(pr4$x[pr4$x[,1]>-2,1],breaks=100)
要做到这一点,最好的方法是让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
,但是这种策略使得轴很难处理。
这里的结果:
试试这个:
hist(pr4$x[pr4$x[,1]>-2,1],breaks=100, col = c(rep("white", 69), rep("green", 15), rep("red", 16)))
您可能需要调整重复次数为每种颜色取决于直方图内断线次数。
或者使用plot = FALSE调用hist,然后计算返回断点处的颜色。然后用col参数进行绘图。 – Spacedman
这是我在评论中提到的方法:(!你应该在你的问题做到这一点)
做一些测试数据
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])
ggplot2
解决方案也可用。
您只需在直方图对象上调用'plot',而不是再次调用数据上的'hist'。 – Spacedman
@Spacedman好点。更新。 – Thomas
不,你需要做'plot(h,.....)'而不是'hist(h,....)'。看到我的答案。 – Spacedman