我有一個直方圖,如圖所示。我希望兩個地區的酒吧分別塗成紅色和綠色,即從左到右的第一個黑色邊框的酒吧應爲紅色,第二個區域的酒吧應爲綠色。 這可以在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