Я хотел бы использовать stat_density()
и facet_wrap()
в пакете ggplot2
для создания графиков плотности ядра для различных группировок, но я хочу убедиться, что я использую одинаковую полосу пропускания для каждого графика.Могу ли я быть уверен, что stat_density()
использует одинаковую полосу пропускания для каждого графика?
Например, используя diamonds
:
library(ggplot2)
ggplot(diamonds, aes(x = carat)) +
stat_density() +
facet_wrap(~ cut) +
scale_x_log()
В документации показано, что я могу использовать adjust
чтобы настроить автоматическую полосу пропускания, но это просто применяет несколько и возвращает меня к первоначальному вопросу.stat_density()
также имеет опцию ...
, но я не смог пройти через опцию density()
bw
, например:
ggplot(diamonds, aes(x = carat)) +
stat_density(bw = 1) +
facet_wrap(~ cut) +
scale_x_log()
Итак, если stat_density()
isn 't использовать одну и ту же полосу пропускания для всех аспектов, есть ли способ, которым я могу это форсировать?Я пробовал решение ddply()
с transform()
и density()
, но это не удалось, потому что density()
не обязательно возвращает то же количество значений x и y, что и для ввода.Есть идеи?Спасибо!
Редактировать Похоже, ggplot2
назначает оптимальную полосу пропускания для каждого аспекта (похоже, @Ramnath и Dianardo, Fortin и Lemieux Econometrica 1996 согласныс этим), а не постоянная пропускная способность, которую я искал.Но, если мне нужна постоянная пропускная способность для всех аспектов, моя попытка ниже не удастся.
my.density <- function(x) {
temp <- density(x$carat, bw = 0.5)
return(data.frame(carat = temp$x, density = temp$y))
}
temp <- ddply(diamonds, .(cut), my.density)
ggplot(temp, aes(x = carat, y = density)) +
geom_point() +
facet_wrap(~ cut) +
scale_x_log()
Warning messages:
1: In match.fun(get(".transform", .))(values) : NaNs produced
2: In match.fun(get(".transform", .))(values) : NaNs produced
3: In match.fun(get(".transform", .))(values) : NaNs produced
4: In match.fun(get(".transform", .))(values) : NaNs produced
5: In match.fun(get(".transform", .))(values) : NaNs produced
6: Removed 84 rows containing missing values (geom_point).
7: Removed 113 rows containing missing values (geom_point).
8: Removed 98 rows containing missing values (geom_point).
9: Removed 98 rows containing missing values (geom_point).
10: Removed 106 rows containing missing values (geom_point).