我想在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()
没有在所有方面使用相同的带宽,有没有办法可以强制执行此操作?我尝试使用ddply()
和transform()
的{{1}}解决方案,但这失败了,因为density()
不一定会返回与输入相同数量的x和y值。有任何想法吗?谢谢!
修改
看起来density()
为每个方面分配了最佳带宽(看起来像@Ramnath和Dianardo,Fortin和Lemieux Econometrica 1996同意这一点),而不是我所寻求的恒定带宽。但是,如果我确实需要跨越所有方面的恒定带宽,我的尝试将失败。
ggplot2
答案 0 :(得分:2)
警告是由carat
中my.density
的负值引起的。稍微修改一下你的代码就可以了:
ggplot(temp, aes(x = carat, y = density)) +
geom_line(subset = .(carat > 0)) +
facet_wrap(~ cut) + scale_x_log()
希望这很有用