我开始非常喜欢小提琴情节,因为当你有趣的发行时,它们给我一个更好的感觉.我喜欢自动化很多东西,因此遇到了一个问题:当一个变量的方差为0时,boxplot只会给你一条线.然而,Geom_violin以错误终止.我喜欢什么样的行为?好吧,要么排成一行,要么没有,但请给我其他变量的分布.
好的,快速的例子:
dff=data.frame(x=factor(rep(1:2,each=100)),y=c(rnorm(100),rep(0,100)))
ggplot(dff,aes(x=x,y=y)) + geom_violin()
Run Code Online (Sandbox Code Playgroud)
产量
Error in `$<-.data.frame`(`*tmp*`, "n", value = 100L) :
replacement has 1 row, data has 0
Run Code Online (Sandbox Code Playgroud)
但是,有效的是:
ggplot(dff,aes(x=x,y=y)) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)
更新:
该问题从昨天开始解决:https://github.com/hadley/ggplot2/issues/972
更新2 :(来自问题作者)哇,哈德利自己回应了!geom_violin现在表现与geom_densityR基本一致density.
但是,我不认为这种行为是最优的.
(1)'零'问题
只需使用我的原始示例运行它:
dff=data.frame(x=factor(rep(1:2, each=100)), y=c(rnorm(100), rep(0,100)))
ggplot(dff,aes(x=x,y=y)) + geom_violin(trim=FALSE)
Run Code Online (Sandbox Code Playgroud)
右边的情节是否是"全零"的适当表示?我不这么认为.最好是修剪产生一条线以显示数据没有变化.解决方法解决方案:添加+geom_boxplot()
(2)我可能真的想要TRIM=TRUE.
例:
dff=data.frame(x=factor(rep(1:2, each=100)), y=c(rgamma(100,1,1), rep(0,100) ))
ggplot(dff,aes(x=x,y=y)) + geom_violin(trim=FALSE)
Run Code Online (Sandbox Code Playgroud)
现在我有非零数据,标准内核密度估计不能正确处理.随着trim=T我可以很快看到数据是严格积极的.
我并不认为当前的行为是"错误的",因为它与其他功能一致.但是,geom_violin可以在不同的上下文中使用,用于探索具有异构数据类型的不同data.frames(例如,正面+倾斜或不正面).
ggplot2在问题得到解决之前处理此问题的三种选择:
geom_violin可以正常工作。vioplot如果您不打算使用 ,请查看该软件包ggplot2。vioplot当你给它提供一堆相同的值时,不会抛出错误。Hmisc包包含一个panel.bpplot(箱形百分位数图)函数,可以使用包bwplot中的函数创建小提琴图lattice。请参阅 的示例部分?panel.bpplot。当你向它提供相同值的向量时,它会生成一条线。| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |