2014-05-14 29 views
8

在用下面的代碼生成的情節,我想改變顏色,因此所有值< 0.6是一樣的‘低’的色彩和更高的所有值比1高的是「高」顏色。[R GGPLOT2 - 如何指定出界值顏色

AS是表示在數據的整個數值範圍的顏色漸變段。我嘗試添加限制,但是這使得所有超出界限的值與NA值相同,這不是我想要的,因爲我需要缺少NA值以清楚地伸出並且看起來不像界限值< 0.6那樣。

我相信答案是與OOB,打破論點,但沒有成功得到它的工作。

library(ggplot2) 
a = rnorm(17*17, 0.733,0.21) 
qcMat = matrix(a, ncol = 17) 
qcMat[qcMat> 1] = 1 
#qcMat contains values between 0 and 1 and some NAs 

m = melt(t(qcMat)) 
m$Var2 <- with(m,factor(Var2, levels = rev(sort(unique(Var2))))) 
ggplot(m, aes(as.factor(Var1), Var2, group=Var2)) + 
    geom_tile(aes(fill = value)) + 
    geom_text(aes(fill = m$value, label = round(m$value, 2))) + 
    scale_fill_gradient(low = "red", high = "green") + 
    xlab("") + ylab("") + ggtitle(paste("biscuit:", biscuit_id, "- QC", sep = " ")) 
+0

你寫「都大於1的值是‘高’顏色」和「 qcMat包含0和1之間的值以及一些NAs'。爲什麼在數據中沒有任何1時使用1作爲限制? – Henrik

+0

@亨利克爲這段代碼生成的數據並不是真正反映我工作的實際數據,但它非常接近。還修復了dishMat的移除。 – HoaxKey

回答

14

正如你說你自己,你想在scale_fill_gradientoob參數。鉗位值,你可以使用squish from the scales package(安裝ggplot2scales安裝):

library(scales) 

後來

scale_fill_gradient(low = "red", high = "green", limits=c(0.6, 1), oob=squish) 
+0

太棒了!我沒有加載秤包,但我已經嘗試了除此之外的確切解決方案。如此接近但沒有雪茄。乾杯斯特凡! – HoaxKey

+0

我不明白這個例子。你在哪裏指定值超出範圍的顏色?這只是使其不被視爲NA的值 – GabrielMontenegro

0

嘗試改變geom_tile以下:

geom_tile(aes(fill = ifelse(value<0.6,min(m$value,na.rm=TRUE), 
           ifelse(value>1,max(m$value,na.rm=TRUE), 
            value)))) 

編輯:那就不要使用最小最大,所以我們會得到0.6-1範圍:

geom_tile(aes(fill = ifelse(value<0.6,0.6, 
          ifelse(value>1,1, 
            value)))) 
+0

謝謝zx8754這絕對是直接的一步,但並不完美,我已經更新了我的問題,以反映你的建議並澄清了它提出的新問題。乾杯! – HoaxKey

+0

@HoaxKey更新了答案。 – zx8754

+0

更新的問題。這更接近,但不完美。我真的很感謝你對我的幫助,我不認爲你是一個可以給小費的用戶。 – HoaxKey