8.7 提琴图

2004 年 Daniel Adler 开发 vioplot 包实现提琴图的绘制,它可能是最早实现此功能的 R 包,随后10余年没有更新却一直坚挺在 CRAN 上,非常难得,好在 Thomas Kelly 已经接手维护。另一款绘制提琴图的 R 包是 Peter Kampstra 开发的 beanplot (Kampstra 2008),也存在很多年了,不过随着时间的变迁,比较现代的方式是 ggplot2 带来的 geom_violin() 扔掉了很多依赖,也是各种图形的汇集地,可以看作是最佳实践。提琴图比起箱线图优势在于呈现更多的分布信息,其次在于更加美观,但是就目前来说箱线图的受众比提琴图要多很多,毕竟前者是包含更多统计信息,如图8.11 所示。

boxplot(count ~ spray, data = InsectSprays)
vioplot::vioplot(count ~ spray, data = InsectSprays, col = "lightgray")
ggplot(InsectSprays, aes(x = spray, y = count)) +
  geom_violin(fill = "lightgray") +
  theme_minimal()
beanplot::beanplot(count ~ spray, data = InsectSprays, col = "lightgray")
几种不同的提琴图几种不同的提琴图几种不同的提琴图几种不同的提琴图

图 8.11: 几种不同的提琴图

ggnormalviolin 包在给定均值和标准差的情况下,绘制正态分布的概率密度曲线,如图 8.12 所示。

library(ggnormalviolin)
with(
  aggregate(
    data = iris, Sepal.Length ~ Species,
    FUN = function(x) c(dist_mean = mean(x), dist_sd = sd(x))
  ),
  cbind.data.frame(Sepal.Length, Species)
) %>%
  ggplot(aes(x = Species, mu = dist_mean, sigma = dist_sd, fill = Species)) +
  geom_normalviolin() +
  theme_minimal()
正态分布的概率密度曲线

图 8.12: 正态分布的概率密度曲线

参考文献

Kampstra, Peter. 2008. beanplot: A Boxplot Alternative for Visual Comparison of Distributions.” Journal of Statistical Software 28 (1): 1–9. http://www.jstatsoft.org/v28/c01/.