realdata = https://www.dropbox.com/s/pc5tp2lfhafgaiy/realdata.txt
simulation = https://www.dropbox.com/s/5ep95808xg7bon3/simulation.txt
使用带宽= 1.5的数据密度图给出了以下图表:
prealdata = scan("realdata.txt")
simulation = scan("simulation.txt")
plot(density(log10(realdata), bw=1.5))
lines(density(log10(simulation), bw=1.5), lty=2)
Run Code Online (Sandbox Code Playgroud)

但是使用ggplot2绘制相同的数据,带宽参数(adjust)似乎工作方式不同.为什么?
vec1 = data.frame(x=log10(realdata))
vec2 = data.frame(x=log10(simulation))
require(ggplot2)
ggplot() +
geom_density(aes(x=x, linetype="real data"), data=vec1, adjust=1.5) +
geom_density(aes(x=x, linetype="simulation"), data=vec2, adjust=1.5) +
scale_linetype_manual(name="data", values=c("real data"="solid", "simulation"="dashed"))
Run Code Online (Sandbox Code Playgroud)

关于如何更好地平滑这些数据的建议也非常受欢迎!
adjust=是不一样的bw=.当你策划
plot(density(log10(realdata), bw=1.5))
lines(density(log10(simulation), bw=1.5), lty=2)
Run Code Online (Sandbox Code Playgroud)
你会得到同样的东西 ggplot

无论出于何种原因,ggplot都不允许您指定bw=参数.默认情况下,density使用bw.nrd0()这样当你改变了这个使用基础图形的情节,你不能改变使用这个值ggplot.但是使用的是什么adjust*bw.因此,既然我们知道如何计算默认值bw,我们可以重新计算adjust=以使用相同的值.
#helper function
bw<-function(b, x) { b/bw.nrd0(x) }
require(ggplot2)
ggplot() +
geom_density(aes(x=x, linetype="real data"), data=vec1, adjust=bw(1.5, vec1$x)) +
geom_density(aes(x=x, linetype="simulation"), data=vec2, adjust=bw(1.5, vec2$x)) +
scale_linetype_manual(name="data",
values=c("real data"="solid", "simulation"="dashed"))
Run Code Online (Sandbox Code Playgroud)
这导致了

这与基本图形图相同.