2016-09-20 73 views
3

我正在嘗試使用geom_tile創建一個圖。源數據是連續的,但我想使用離散級別對其進行着色,以使得繪圖更易於閱讀。我希望生成的顏色條顯示離散的級別,但要將基礎數據稱爲連續的。類似這樣的: colourbar在ggplot中創建半離散顏色條

這實質上是一個連續的彩色比例覆蓋離散值。

到目前爲止,我有這樣的:

require(ggplot2) 

x <- rep(1:10, 10) 
y <- rep(1:10, each=10) 
z <- rnorm(length(y)) 

df <- data.frame(x, y, z) 

ggplot(df) + geom_tile(aes(x, y, fill=z)) + 
scale_fill_gradient2(low="blue", mid="white", high="red", midpoint=0) 

給予這樣的: continuous scale

我想斌的連續可變的 「Z」 來設定的水平,所以我可以用切:

df$discrete_z <- cut(z, breaks=seq(-3,3, 1), include.lowest=T) 

ggplot(df) + geom_tile(aes(x, y, fill=discrete_z)) + 
scale_fill_brewer(type="div", palette="PRGn", guide="legend") 

給予: discrete scale

這是更接近,但現在的數字表示爲每個顏色「塊」的範圍,而我試圖讓數字分別位於顏色塊之間,以更好地給出連續縮放的印象。

+0

'discrete_z'是一個因素。您可以更改關卡名稱,最簡單的方法是在標籤參數 –

回答

1

如果您選擇的每個區間的下限是斌的名字,你得到的東西像下面這樣:

df$discrete_z <- cut(z, breaks=seq(-3,3, 1), labels = seq(-3,2, 1), include.lowest=T) 

ggplot(df) + geom_tile(aes(x, y, fill=discrete_z)) + 
    scale_fill_brewer(type="div", palette="PRGn", guide="legend") 

enter image description here

+0

的'cut'中。問題是,因爲每種顏色代表一個bin,與缺省標籤相比,這會丟失一些信息。例如,標記爲「-2」的bin實際上包含從-2到-3的值。真的,我需要像示例色彩棒那樣將標籤放在類別之間。 –