2012-08-26 55 views
3

我創建ggplot2一個簡單的散點圖和可視化的z變量和顏色:自動非等距休息

require(ggplot2) 

data = data.frame(x=runif(1000), y=runif(1000), vis=rf(1000, df1=1, df2=3)) 
qplot(x=x, y=y, data=data, color=vis) 

然而,這當然不是非常豐富,因爲分佈是嚴重傾斜:

hist(data$vis) 

這個問題 - 在我看來 - 是等距離的休息,它創建的數據根本不在樣本中。

所以,這裏是我的問題:有沒有一種克服這個問題的有效方法,並創造更多的休息,更多的數據可用。換句話說,我正在尋找非線性斷點或者非等距線圈。

回答

3

編輯:可能是一些更類似於你想要什麼:

breaks <- quantile(data$vis) 
qplot(x=x, y=y, data = data, color = vis) + 
    scale_colour_gradientn(breaks = as.vector(breaks), colours = 
    c("grey", "blue", "red"), values = as.vector(breaks), 
    oob = identity, rescaler = function(x,...) x, labels = names(breaks)) 

enter image description here

老答案:在這種情況下,休息是你真正想要的不是

qplot(x=x, y=y, data=data, color=vis) + scale_colour_gradient(breaks = 1:10 * 10) 

enter image description here

考慮到數據量,我們有

quantile(data$vis, seq(0, 1, 0.1)) 
      0%   10%   20%   30%   40% 
9.294095e-07 1.883887e-02 8.059213e-02 1.646752e-01 3.580304e-01 
     50%   60%   70%   80%   90% 
6.055612e-01 9.463869e-01 1.638687e+00 2.686160e+00 5.308239e+00 
     100% 
1.693077e+02 

所以可能像

qplot(x=x, y=y, data=data, color=vis) + scale_colour_gradient(limits = c(0,5)) 

enter image description here

將是一件好事,在這裏點> 5是灰色的。一個更復雜的解決方案,你可能首先想要的是this

+0

感謝您的幫助...這不是我想要的。我猜想:'scale_colour_gradient(breaks = as.matrix(quantile(data $ vis))'更貼近我的意圖,因爲它考慮到了偏斜度,並且沒有視覺檢查就能正常工作。但是:顏色並不適合我的突破... – Seb

+0

@Seb,是的,這就是我的意思:這裏的休息不適合你的需要,'1:10 * 10'只是一個例子,你應該結合as.vector(分位數(data $ vis))'最後我提到了答案。 – Julius

+0

@Seb,我的編輯答案仍然不是你所需要的嗎? – Julius