2013-01-11 78 views
10

我使用smoothScatter()函數在R中生成顏色密度散點圖。R使用smoothScatter生成的顏色密度散點圖的圖例

例子:

## A largish data set 
n <- 10000 
x1 <- matrix(rnorm(n), ncol = 2) 
x2 <- matrix(rnorm(n, mean = 3, sd = 1.5), ncol = 2) 
x <- rbind(x1, x2) 
oldpar <- par(mfrow = c(2, 2)) 
smoothScatter(x, nrpoints = 0) 

輸出:

enter image description here

我遇到的問題是,我不能確定如何添加描述在數字方面的相對差異傳說/色標在不同的陰影之間。例如,無法判斷上圖中最深的藍色是否是沒有某種圖例或色階的最亮藍色的2倍,10倍或100倍。 R中是否有任何方法檢索必要的信息來製作這樣一個比例尺,或者任何可以自動生成這種性質比例尺的內容?

+0

請參閱[本評論](http://stackoverflow.com/questions/8899096/color-bar-for-smoothscatter-in-r#comment11130419_8899096) – mnel

+0

@mnel我可能會採取其中一種方法,如果需要的話,儘管理想情況下我使用'smoothScatter()'來完成它。 –

+0

您的解決方案將(可能)涉及使用'postPlotHook'參數。你可以看看他們如何創建圖例的'fields :: image.plot'函數。 – mnel

回答

9

這裏是一個依靠fields::imageplot答案,有的擺弄與par(mar)得到正確

fudgeit <- function(){ 
    xm <- get('xm', envir = parent.frame(1)) 
    ym <- get('ym', envir = parent.frame(1)) 
    z <- get('dens', envir = parent.frame(1)) 
    colramp <- get('colramp', parent.frame(1)) 
    fields::image.plot(xm,ym,z, col = colramp(256), legend.only = T, add =F) 
} 

par(mar = c(5,4,4,5) + .1) 
smoothScatter(x, nrpoints = 0, postPlotHook = fudgeit) 

enter image description here

邊緣可以擺弄image.plot得到你想要的東西,看看?bkde2Dtransformation參數smoothScatter以瞭解顏色代表的內容。

+1

問題:條形刻度中的0.5表示什麼? –

+1

好的。現在,我知道值是fudgeit函數中'z'的數量。但是z表示什麼。 –

+0

我第二個問題。規模上的數字是什麼意思? – Rodrigo