我试图在 ggplot2 中显示一些与高斯核卷积的频率。我尝试用以下方法平滑线条:
+ stat_smooth(se = F,method = "lm", formula = y ~ poly(x, 24))
没有成功。
我读到一篇文章建议频率应与高斯核进行卷积。 ggplot2 的 stat_密度函数 ( http://docs.ggplot2.org/current/stat_density.html ) 似乎能够生成。
但是,我似乎无法用 stat_密度替换我的几何图形。我的代码有什么问题吗?
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 )
最佳答案
既然我的评论解决了您的问题,我会将它们转换为答案:
密度函数进行单独测量并通过卷积计算核密度分布(高斯是默认核)。例如,绘图(密度(rnorm(1000)))。您可以使用bw
(带宽)参数控制平滑度。例如,plot(密度(rnorm(1000),bw=0.01))
。
但是您的数据框已经是密度分布(类似于密度
函数的输出)。要生成更平滑的密度估计,您需要从基础数据开始,对其运行密度,调整 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
参数来获得您想要的平滑度。
关于r - 使用 ggplot2 显示平滑(卷积)密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127699/