小提琴图用于可视化数据的分布及其概率密度。它是箱式图和密度图的组合,密度图通过旋转放置在箱式图侧边,以显示数据的分布形状。小提琴图比箱形图显示更多的信息。主要是数据的分布,可以看出是双峰的还是多峰的
geom_violin()主函数
color, size, linetype:线条的颜色大小和线的类型
fill:填充颜色
trim:是否修剪小提琴尾部
stat_summary():添加描述信息
rm(list = ls())
# 获取示例数据
get_data <- function() {
data("ToothGrowth")
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
return(ToothGrowth)
}
# 数据集
# @len 目标变量, 为连续变量
# @ dose 分组变量,需要转换为因子
# @ supp 分组变量,需要转换为因子
ToothGrowth <- get_data()
# 需要的包
library(ggplot2)
library(patchwork)
library(tidyverse)
# 绘图
# 基本绘图参数设置
p <- ToothGrowth %>% ggplot(aes(x = dose, y = len))
# 添加小提琴图并添加统计均值和标准差
p1 <- p + geom_violin(trim = FALSE) +
stat_summary(
fun.data = "mean_sdl",
fun.args = list(mult = 1),
geom = "pointrange",
color = "black"
)
# 添加分组颜色、箱式图
p2 <- p + geom_violin(aes(fill = dose), trim = FALSE) +
geom_boxplot(width = 0.2) +
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
# 去除图例
theme(legend.position = "none")
p1 + p2
# 多组图
# supp通过颜色显示,并设立图例
p + geom_violin(aes(color = supp), trim = FALSE, position = position_dodge(0.9)) +
# 添加箱式图
geom_boxplot(aes(color = supp), width = 0.15, position = position_dodge(0.9)) +
# 自定义配色方案
scale_color_manual(values = c("#00AFBB", "#E7B800"))
geom_dotplot()
stackdir:点的堆叠方向默认为向上
stackratio:点的距离
color, fill:同之前
dotsize:点的大小
# 点图绘制并添加均值和标准差
p3 <-
p + geom_dotplot(binaxis = "y",
stackdir = "center",
fill = "lightgray") +
stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1))
# 点图和箱式图的合并
p4 <- p + geom_boxplot(width = 0.5) +
geom_dotplot(binaxis = "y",
stackdir = "center",
fill = "lightgray")
# 点图和小提琴图合并
p5 <- p + geom_violin(trim = FALSE) +
geom_dotplot(binaxis = 'y',
stackdir = 'center',
fill = "#999999") +
stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1))
p3 + p4 + p5
# 多组点图
# 分组信息展示为添加颜色
p6 <- p + geom_boxplot(width = 0.5) +
geom_dotplot(aes(fill = supp), binaxis = 'y', stackdir = 'center') +
scale_fill_manual(values = c("#00AFBB", "#E7B800"))
# 将箱式图分开,并设置间隔为0.8
p7 <-
p + geom_boxplot(aes(color = supp), width = 0.5, position = position_dodge(0.8)) +
geom_dotplot(
aes(fill = supp, color = supp),
binaxis = 'y',
stackdir = 'center',
dotsize = 0.8,
position = position_dodge(0.8)
) +
scale_fill_manual(values = c("#00AFBB", "#E7B800")) +
scale_color_manual(values = c("#00AFBB", "#E7B800"))
p6 + p7
小提琴图不是很常用,也在一些杂志中见到过,但是不是很多见,了解一下就可,毕竟数据分布,还要涉及到后续分析的内容,和自己后续的分析方案是否配套。慎用吧
关于ggplot添加图层真是个好东西,这样的点和箱式图的组合,以前都是用prisma做。
love&peace