2013-01-11 8 views
10

Generuję wykres rozproszenia gęstości kolorów w R za pomocą funkcji smoothScatter().Legenda R dla wykresu rozrzutu gęstości koloru utworzonego za pomocą smoothScatter

Przykład:

## 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) 

wyjściowa:

enter image description here

Problem mam jest to, że jestem pewien jak dodać skalę legenda/kolorów, który opisuje względną różnicę w kategoriach liczbowych między różnymi odcieniami. Na przykład, nie ma sposobu, aby stwierdzić, czy najciemniejszy niebieski na powyższym rysunku jest 2 razy, 10 razy lub 100 razy gęściej niż najjaśniejszy niebieski bez jakiejś legendy lub skali kolorów. Czy istnieje jakaś metoda w R, aby uzyskać wymagane informacje, aby stworzyć taką skalę, lub wszystko, co jest wbudowane, może automatycznie wygenerować skalę kolorów?

+0

Zobacz [ten komentarz] (http://stackoverflow.com/questions/8899096/color-bar-for-smoothscatter-in-r#comment11130419_8899096) – mnel

+0

@mnel Mogę odwołać się do jednego z tych podejść, jeśli zajdzie taka potrzeba, ale najlepiej jestem po sposób to zrobić przy użyciu 'smoothScatter()'. –

+0

Twoje rozwiązanie będzie (prawdopodobnie) wymagało użycia argumentu 'postPlotHook'. Możesz spojrzeć na funkcję 'fields :: image.plot', aby dowiedzieć się, w jaki sposób tworzą legendę. – mnel

Odpowiedz

9

Oto odpowiedź, która opiera się na fields::imageplot a niektóre błahy z par(mar) uzyskać marże poprawne

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

Można pobawić się wokół z image.plot aby dostać to, czego chcesz, i spojrzeć na ?bkde2D i argument transformation do smoothScatter, aby uzyskać pojęcie o tym, co reprezentują kolory.

+1

Pytanie: Co oznacza 0.5 w skali kreskowej? –

+1

OK. Teraz wiem, że wartość jest liczbą "z" w funkcji fudgeit. ale co oznacza z. –

+0

Ja drugie pytanie. Co oznaczają liczby na skali? – Rodrigo

Powiązane problemy