我已经叠加了小提琴图,比较了调查的特定部分的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)
}
结果是这样的
在这种情况下,“开放度”奇怪地呈波浪形,而其他所有区域似乎都像平常一样平滑了。
我认为也许与x=factor(nrow(data))
有关,但同样,波纹肯定会出现在所有截面图中。
我希望所有图都呈波浪形(尽管我仍然不明白为什么),或者所有图都具有相同的平滑度。
如何使所有多面包裹的图具有相同的平滑度,为什么它们首先不同?
谢谢
答案 0 :(得分:2)
用内核密度估计来计算小提琴图的形状。内核密度估计是针对连续数据而不是针对离散数据(例如您的分数)而设计的。虽然您可以将离散的数据馈送到内核估计器,但结果可能并不总是很漂亮甚至有意义。您可以尝试在kernel
中使用不同的bw
和geom_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/density的bw
和density
描述,以获取有关如何估计核密度的更多信息计算。