24

我想用 ggplot2 画一些小提琴图,但我注意到中位数和第一和第三四分位数不会自动显示。我相信这些图会提供更多信息。有人知道怎么做吗?

4

3 回答 3

44

一种方法是在其顶部放置一个细长的箱形图。这是虹膜数据的示例:

require(ggplot2)
ggplot(iris,aes(Species,Sepal.Length))+geom_violin()+geom_boxplot(width=.1)

在此处输入图像描述

于 2013-06-26T17:13:02.187 回答
24

geom_violin有一个参数draw_quantiles允许您指定要包含的分位数。这是虹膜上第 1、第 2 和第 3 个四分位数的示例。

require(ggplot2)
ggplot(iris, aes(Species, Sepal.Length)) +
geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

在此处输入图像描述

于 2017-11-08T07:16:08.430 回答
23

我从谷歌搜索中发现了这一点:

首先,这个 Stack Overflow帖子表明您可以添加stat_summary(fun.y="median", geom="point")以在小提琴图上绘制中值作为一个点。

关于四分位数,您可能必须为上面的 fun.y 参数编写自己的函数,如此处所示。例如:

median.quartile <- function(x){
    out <- quantile(x, probs = c(0.25,0.5,0.75))
    names(out) <- c("ymin","y","ymax")
    return(out) 
}

完整的代码可能如下所示:

require(ggplot2)

median.quartile <- function(x){
  out <- quantile(x, probs = c(0.25,0.5,0.75))
  names(out) <- c("ymin","y","ymax")
  return(out) 
}

ggplot(iris,aes(Species,Sepal.Length))+
  geom_violin()+
  stat_summary(fun.y=median.quartile,geom='point')
于 2013-06-26T17:25:20.917 回答