2013-03-27 15 views
15

Jestem zagubiony rozumieniu następujących wariantów geom_density w ggplot:Jak interpretować różne gęstości ggplot2?

Czy ktoś mógłby wyjaśnić różnicę między tymi czterema połączeniami:

  1. geom_density (aes_string (x = 'myvar')) VS
  2. geom_density (aes_string (x = 'myvar, Y =' .. gęstość .. ')) w porównaniu
  3. geom_density (aes_string (x =' myvar, Y = '.. skalowane ..')) w porównaniu z
  4. geom_density (aes_string (x = 'myvar', y = '.. count ../ sum (.. count ..)'))?

Moje zrozumienie jest, że:

  • geom_density sam będzie produkować gęstość którego powierzchnia pod krzywą sum 1
  • geom_density z ..density.. zasadzie robi to samo ...?
  • ..count../sum(..count..) będzie znormalizować wartości szczytowych być bardziej jak znormalizowanego histogramu, zapewniając, że wszystkie szczyty sumują się do 1
  • ..count.. sama bez mianowniku będzie po prostu pomnożyć każdy pojemnik przez # przedmiotów w nim
  • parametr ..scaled.. pozwoli więc maksymalna wartość gęstości jest 1.

znajdę ..scaled.. bardzo nieintuicyjne i nigdy nie widziałem go stosować, jeśli moja interpretacja jest prawidłowa to tak chciałbym zignorować. Ja głównie szukam wyjaśnienia różnic między geom_density a rodzajem znormalizowanego wykresu gęstości, który zakładam, wymaga argumentu ...count../.... dzięki.

(Powiązane: Error with ggplot2 mapping variable to y and using stat="bin")

+3

Niepowiązane: naprawdę musisz przestać cytować zmienne wewnątrz 'aes()'. Jeśli nie używasz 'aes_string', nie powinieneś tego robić. – joran

+0

@joran: Używam 'aes_string', przepraszam, używam rpy2, więc to zawsze' aes_string' – user248237dfsf

+0

Tylko dla czytelników, którzy się zastanawiają. Pytanie zostało zmodyfikowane w celu rozwiązania problemów związanych z 'aes' vs.' aes_string'. Ten błąd nie był kluczowy dla pytania. – Deleet

Odpowiedz

10

Domyślna estetyczne dla stat_density jest ..density.., więc wezwanie do geom_density który wykorzystuje stat_density domyślnie będzie wykreślić y = ..density.. domyślnie.

Można zobaczyć, jak różne kolumny będzie obliczana przez patrząc na source code

..scaled.. jest zdefiniowany jako

densdf$scaled <- densdf$y/max(densdf$y, na.rm = TRUE) 

Zapraszam go zignorować, jeśli chcesz.

Patrząc na source code for stat_bin

Wyniki są obliczane jako taki

res <- within(results, { 
    count[is.na(count)] <- 0 
    density <- count/width/sum(abs(count), na.rm=TRUE) 
    ncount <- count/max(abs(count), na.rm=TRUE) 
    ndensity <- density/max(abs(density), na.rm=TRUE) 
    }) 

Więc jeśli chcesz porównać wyniki geom_histogram (domyślny stat = 'bin'), a następnie można ustawić y = ..density.. i będzie obliczyć dla ciebie count/sum(count) (rozliczenie szerokości pojemników)

Jeśli chcesz porównać geom_density(aes(y=..scaled..)) z stat_bin, wówczas należałoby użyć geom_histogram(aes(y = ..ndensity..))

Można je dostać w tej samej skali, używając ..count.. w obu, jak również, jednak trzeba by ustawić parametr adjust w stat_density aby uzyskać odpowiednio szczegółowe przybliżenie krzywej.

Powiązane problemy