在ggplot2的小提琴情节中位数和四分位数

时间:2013-06-26 12:03:48

标签: r ggplot2

我想用ggplot2绘制一些小提琴图,但我注意到中位数和第一和第三四分位数不会自动显示。我相信这些情节可以提供更多信息。有人知道这样做的方法吗?

3 个答案:

答案 0 :(得分:41)

这样做的一种方法是在其顶部放置一个薄盒图。以下是虹膜数据的示例:

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

enter image description here

答案 1 :(得分:23)

我是通过谷歌搜索发现的:

首先,此Stack Overflow post表示您可以添加stat_summary(fun.y="median", geom="point")来绘制小提琴图上的中位数作为一个点。

关于四分位数,你可能必须为上面的fun.y参数编写自己的函数,如here所示。 E.g:

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')

答案 2 :(得分:15)

import os cwd = os.getcwd() config = { 'append_dir_to_filename' : ('d5', 'a9'), 'd5': ('nef', 'NED', 'jpg', 'JPG', 'avi', 'AVI'), 'a9': ('mp4', 'MP4', 'jpg', 'JPG', 'avi', 'AVI') } cameraDirs = [os.path.join(cwd, x) for x in next(os.walk(cwd))[1] if x[-2:] in config['append_dir_to_filename']] for cameraDir in cameraDirs: cameraShortName = cameraDir[-2:] for rootDir, _, files in os.walk(cameraDir): prefix = os.path.basename(rootDir) for file in files: if (any(x for x in config[cameraShortName] if file.endswith(x))): os.rename(os.path.join(rootDir, file), os.path.join(rootDir, "{}_{}".format(prefix, file))) 有一个参数geom_violin,允许您指定要包含的分位数。以下是虹膜上第1,第2和第3四分位数的示例。

draw_quantiles

enter image description here