【发布时间】:2015-02-23 08:59:28
【问题描述】:
有没有一种通用的方法来绘制密度(小提琴图)或直方图,显示x 沿着平滑的(x,y) 曲线的分布?当有多个组时,我使用这种方法来显示x 的边际分布(例如,一个面板上的不同曲线,由不同的颜色描绘)。
这是一个使用Hmisc 包的plsmo 函数获取分层黄土曲线和尖峰直方图的示例,显示sex 特定于age 的数据密度。
require(Hmisc)
set.seed(1)
age <- rnorm(500, 50, 15)
y <- sample(0:1, 500, TRUE)
sex <- sample(c('female','male'), 500, TRUE)
plsmo(age, y, group=sex, col=1:2,
datadensity=TRUE, scat1d.opts=list(nhistSpike=20))
【问题讨论】:
-
如何指定平滑曲线?有一个reproducible example 可以帮助您查看您的输入内容。
-
我无法理解 plsmo 正在估计和绘制的内容。我会想象你正在描述一维密度:
densityplot(~age, groups=sex, data=dat),ggplot2 对应物将是:p <- ggplot( data=dat, aes( x=y, y=age, group=sex))+geom_violin(); print(p) -
plsmo使用lowess()估计 x 和 y 之间的关系,然后计算高分辨率直方图的元素,以便在分组变量上分布x条件并将直方图投影到lowess曲线。 -
我怀疑您是否能够在不创建自己的自定义函数的情况下实现任何接近此的目标。我想你可以修改你自己的
plsmo来使用ggplot。sat_smooth()已经在做黄土部分了,剩下的就是像在plsmo函数中一样添加直方图 -
是的,我有一个新功能可以创建一个图层以添加到
ggplot()- 请参阅github.com/harrelfe/rms/blob/master/R/ggplot.Predict.s。但是这个函数必须提供ggplot对象已知的冗余信息,并且该函数采用已经平滑的数据而不是原始数据。我还创建了一个新的geom--geom_plsmo-- 以使用非常快的lowess()但geom_plsmo不会将直方图添加到曲线中。
标签: r ggplot2 histogram density-plot