当数据(部分)不变时,小提琴情节有一些奇怪的行为。
如果我检查恒定数据并人为地添加一些小错误(例如通过添加runif( N, min = -0.001, max = 0.001 )
,脚本将运行。但是,这会将其他小提琴图扭曲为垂直线(参见{ {3}}),虽然看起来应该像1
的问题:
是否有可能(当小提琴情节的部分数据不变时)
R代码:
library(ggplot2)
library(grid)
library(gridExtra)
N <- 20
test_data <- data.frame(
idx <- c( 1:N, 1:N ),
vals <- c( runif(N, 0, 1),
rep( 0.5, N)), # <- R script won't run
#rep( 0.5, N) + runif( N, min = -0.001, max = 0.001 )), # <- delivers graphic (distorted)
type <- c( rep("range", N),
rep("const", N))
)
grid.arrange(
ggplot( test_data, aes( x = idx, y = vals)) +
geom_line( aes(colour = type)),
ggplot( test_data, aes( x = type, y = vals)) +
geom_violin( aes( fill = type),
position = position_dodge(width = 1))
)
答案 0 :(得分:1)
我终于得到了一个小提琴情节,其中一些小组的方差为零(标准偏差)
在我的例子中,我有3组数据 - 两组没有零差异,第三组是常数。 在累积组时,我计算标准差(方差将是相同的功能)
library(ggplot2)
library(gridExtra)
N <- 20
test_data <- data.frame()
# random data from range
for( grp_id in 1:2)
{
group_data <- data.frame(
idx = 1:N,
vals = runif(N, grp_id, grp_id + 1),
type = paste("range", grp_id)
)
group_data$sd_group <- sd( group_data$vals)
test_data = rbind( test_data, group_data)
}
# constant data
group_data = data.frame(
idx = 1:N,
vals = rep( 0.5, N),
type = "const"
)
group_data$sd_group <- sd( group_data$vals)
按照建议我添加一点偏移量来获得小组的小提琴情节&#39; const&#39;
# add a little jittering to get the flat line
if( 0 == group_data$sd_group[1])
{
group_data$vals[1] = group_data$vals[1] + 0.00001
}
test_data = rbind( test_data, group_data)
现在唯一要做的就是将所有小提琴曲线缩放到相同的宽度
grid.arrange(
ggplot( test_data, aes( x = idx)) +
geom_line( aes( y = vals, colour = type)),
ggplot( test_data, aes( x = type, y = vals, fill = type)) +
geom_violin( scale = "width"),
ncol = 1
)