2014-02-18 156 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解決方案也可用。