为什么我的一些小提琴图在离散标度上看起来“呈波浪形”?

时间:2019-08-07 09:52:22

标签: r ggplot2 violin-plot

我已经叠加了小提琴图,比较了调查的特定部分的A组和B组得分,这些方面按部分包裹。分数是离散的1-7值。在某些小提琴图中,平滑效果符合预期。在其他情况下,一组或另一组在离散分数之间看起来很“波浪形”(如下所示)。

我认为问题可能在于组的大小不同,但是可以肯定的是,“波纹度”将出现在所有剖面图中。

此外,这并没有向我解释为什么尽管离散1-7值,但曲线仍会“浸入”。

当我添加adjust参数时,它会使本来就很平滑的部分过度平滑,因此它不是很理想。

我使用此代码创建图

create_violin_across_groups_by_section <- function(data, test_group="first") {
  g <- ggplot(data) + 
    aes(x=factor(nrow(data)),y=score,fill=group) +
    geom_violin(alpha=0.5,position="identity") +
    facet_wrap("section") +
    labs(
      title = paste("Comparison across groups for ", test_group)
    ) 
  return(g)
}

结果是这样的

violin plot with one wavy section

在这种情况下,“开放度”奇怪地呈波浪形,而其他所有区域似乎都像平常一样平滑了。

我认为也许与x=factor(nrow(data))有关,但同样,波纹肯定会出现在所有截面图中。

我希望所有图都呈波浪形(尽管我仍然不明白为什么),或者所有图都具有相同的平滑度。

如何使所有多面包裹的图具有相同的平滑度,为什么它们首先不同?

谢谢

1 个答案:

答案 0 :(得分:2)

用内核密度估计来计算小提琴图的形状。内核密度估计是针对连续数据而不是针对离散数据(例如您的分数)而设计的。虽然您可以将离散的数据馈送到内核估计器,但结果可能并不总是很漂亮甚至有意义。您可以尝试在kernel中使用不同的bwgeom_violin参数值,或者可以考虑为离散数据设计的某些参数,例如geom_dotplot

+ geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge")

请查看geom_dotplot https://ggplot2.tidyverse.org/reference/geom_dotplot.html的相应示例,以预览其外观。

请查看指向kernel函数https://ggplot2.tidyverse.org/reference/geom_violin.html的小提琴图https://www.rdocumentation.org/packages/stats/versions/3.6.1/topics/densitybwdensity描述,以获取有关如何估计核密度的更多信息计算。