2011-09-24 18 views
3

我試圖做的,包括負數的數據集的熱圖:ggplot熱圖的傳說並不代表負數

Ne  BR   Error 
10000 0.00001 1.62 
10000 0.000001 -1.03 
10000 0.0000001 -0.124 
100000 0.00001 36.73 
100000 0.000001 5.86 
100000 0.0000001 -0.79 
1000000 0.00001 -8.335 
1000000 0.000001 39.465 
1000000 0.0000001 2.59 

我用這個代碼:

library(ggplot2) 
data = read.csv('full_path') 
(p <- ggplot(data[1:9,], aes(Ne, BR)) + 
    geom_tile(aes(fill=Error), colour="white") + 
    scale_fill_gradient(low="white", high="black") + scale_x_log('Ne') +  
    scale_y_log('Birth Rate') + opts(axis.ticks = theme_blank())) 

這產生了一個很好的熱圖,但圖例沒有考慮負數。顏色似乎正確地反映了負值,但圖例停在零,這是淺灰色。我怎樣才能得到一個圖例,涵蓋了我的數據框'錯誤'列中的所有數據?

+0

你需要提供一個可重複的例子,展現你描述的行爲,我想。 – joran

+0

這是不是可重複的?如果我能弄清楚,我會上傳結果數字。 – Jake

+0

嗯,你編輯了這個問題。它最初有ggplot代碼,它引用的變量不在您提供的數據中。 – joran

回答

7

試試這個:

ggplot(dat, aes(Ne, BR)) + 
    geom_tile(aes(fill=Error), colour="white") + 
    scale_fill_gradient(low="white", high="black",breaks = seq(min(dat$Error),max(dat$Error),length.out = 5)) + scale_x_log('Ne') +  
    scale_y_log('Birth Rate') + opts(axis.ticks = theme_blank()) 

ggplot只是想挑「好」休息的規模爲你,類似軸的刻度是如何選擇的。 (我改變了你的數據幀的名字dat,如data是R的常用功能這不是一個巨大的交易,但它避免了混淆。)

enter image description here

+0

是的,那很好。謝謝!非常奇怪的是,一個'好'的休息意味着忽略一些數據。 – Jake

+1

@Jake好吧,它並不是真的'忽略'數據。考慮軸刻度標記類比。人們會希望在scatterplot中有超出x軸上第一個和最後一個刻度的數據點。這只是使用相同的策略,這無疑會導致相當程度的混淆。請記住,更改'休息點'並不會改變數據的分類方式,它只會改變圖例中顯示的內容。 – joran

+0

這很有道理。感謝您的解釋。當然,解決方案。 – Jake