当唯一点少于四个时,小提琴图不会像预期的那样显示预期的密度曲线

Violin plots don't show expected density curves as expected when unique points are less than four

背景

我正在用 ggplot2 玩箱形图和小提琴图,但我发现一些奇怪的现象,只有当唯一数据的数量少于四个时才会发生。我不太确定 SO 是否是这个线程的合适位置,如果不是,请引导我到正确的位置。

单个数据点:未渲染绘图

df <- data.frame(state = "bedtime", value = 100)

箱线图

ggplot(aes(x = state, y = value), data = df) + geom_boxplot() + geom_point()

小提琴情节

ggplot(aes(x = state, y = value), data = df) + geom_violin()

没有。收到一条警告消息。

两到三个数据点:有时会渲染图

如果不是,就像单数据点的情况。如果渲染,分位数线不一致。

df <- data.frame(state = rep("after_meal", 4), value = rep(c(178, 162), each = 2))

箱线图

ggplot(aes(x = state, y = value), data = df) + geom_boxplot() + geom_point()

小提琴情节

ggplot(aes(x = state, y = value), data = df) + geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

如您所见,分位数线彼此不一致。

问题

  1. 为什么只有一个数据点不显示小提琴图?我查了一下kernel density estimation, and I thought there should be a very wide but flat violin. Are there other limitations or constraint in geom_violin?还是小提琴情节的规律?
  2. 为什么在第二种情况下,25% 和 75% 的分位数放在箱形图和小提琴图之间的不同位置?

小提琴图是沿纵轴反映的密度估计图,与箱线图的不同之处在于箱线图显示数据本身。

关于你的第一个问题,一个点的密度是无限的,因为你在 space 中的一个特定点请求它,宽度为零,即无限高(要看到这个,替换 geom_violingeom_density.

第二个问题源于同一件事:箱形图对于少量点更准确,因为密度估计是连续的,并且对于非常短的范围没有明确定义。