我正在尝试在ggplot2中显示一些与高斯内核卷积的频率。我尝试用以下方法平滑线条:
+ stat_smooth(se = F,method = "lm", formula = y ~ poly(x, 24))
没有成功。
我读了一篇文章,建议频率应该用高斯内核进行卷积。哪个ggplot2的stat_density函数(http://docs.ggplot2.org/current/stat_density.html)似乎能够生成。
但是,我似乎无法用stat_density替换我的几何体。我的代码有什么问题吗?
require(reshape2)
library(ggplot2)
library(RColorBrewer)
fileName = "/1.csv" # downloadable there: https://www.dropbox.com/s/l5j7ckmm5s9lo8j/1.csv?dl=0
mydata = read.csv(fileName,sep=",", header=TRUE)
dataM = melt(mydata,c("bins"))
myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))
ggplot(data=dataM,
aes(x=bins, y=value, colour=variable)) +
geom_line() + scale_x_continuous(limits = c(0, 2))
此代码生成以下图表:
我正在考虑平滑线条,所以看起来更像是这样:
(来自http://journal.frontiersin.org/Journal/10.3389/fncom.2013.00189/full)
答案 0 :(得分:2)
由于我的评论解决了您的问题,我将其转换为答案:
density
函数进行单独测量并通过卷积计算核密度分布(高斯是默认内核)。例如,plot(density(rnorm(1000)))
。您可以使用bw
(带宽)参数控制平滑度。例如,plot(density(rnorm(1000), bw=0.01))
。
但是您的数据框已经是密度分布(类似于density
函数的输出)。要生成更平滑的密度估算,您需要从基础数据开始并在其上运行density
,调整bw
以获得所需的平滑度。
如果您无法访问基础数据,则可以按如下方式平滑现有的密度分布:
ggplot(data=dataM, aes(x=bins, y=value, colour=variable)) +
geom_smooth(se=FALSE, span=0.3) +
scale_x_continuous(limits = c(0, 2)).
使用span
参数进行游戏,以获得所需的平滑度。