2013-08-10 6 views
2

У меня есть данные в R как следующее:Разница между geom_density в ggplot2 и плотности в базовом R

bag_id location_type   event_ts 
2  155  sorter 2012-01-02 17:06:05 
3  305  arrival 2012-01-01 07:20:16 
1  155  transfer 2012-01-02 15:57:54 
4  692  arrival 2012-03-29 09:47:52 
10 748  transfer 2012-01-08 17:26:02 
11 748  sorter 2012-01-08 17:30:02 
12 993  arrival 2012-01-23 08:58:54 
13 1019  arrival 2012-01-09 07:17:02 
14 1019  sorter 2012-01-09 07:33:15 
15 1154  transfer 2012-01-12 21:07:50 

, где класс (event_ts) является POSIXct.

Я хотел найти плотность мешков в каждом месте в разное время.

Я использовал команду geom_density(ggplot2), и я мог бы построить ее очень красиво. Интересно, есть ли разница между density(base) и этой командой. Я имею в виду любую разницу в методах, которые они используют, или по умолчанию, которые они используют, и тому подобное.

Мне нужно добавить плотности в мой фрейм данных. Если бы я использовал функцию density(base), я знал, как использовать функцию approxfun, чтобы добавить эти значения в свой фрейм данных, но мне интересно, является ли это одним и тем же, когда я использую geom_density(ggplot2).

ответ

5

Быстрое прочтение ggplot2 documentation for geom_density() показывает, что оно завершает функциональность в stat_density(). В первом аргументе ссылается, что параметр adjust, поступающий от базовой функции density(). Итак, к вашему прямому вопросу - они построены из одной и той же функции, хотя используемые точные параметры могут быть разными. У вас есть некоторый контроль над настройкой этих параметров, но вы не сможете получить необходимую гибкость.

Один из вариантов использования geom_density() - это рассчитать плотность, которую вы хотите, за пределами ggplot(), а затем построить ее с помощью geom_line(). Например:

library(ggplot2) 
#100 random variables 
x <- data.frame(x = rnorm(100)) 
#Calculate own density, set parameters as you desire 
d <- density(x$x) 
x2 <- data.frame(x = d$x, y = d$y) 

#Using geom_density() 
ggplot(x, aes(x)) + geom_density() 
#Using home grown density 
ggplot(x2, aes(x,y)) + geom_line(colour = "red") 

Здесь они дают почти идентичные участки, хотя они могут значительно отличаться от ваших данных и настроек.