导语
GUIDE ╲
我们平时说的小提琴图其实是箱式图与核密度图的结合,箱式图展示了分位数的位置,小提琴图则展示了任意位置的密度,小提琴图可以展示密度较高的位置。下面我们一起来看看几种绘图R包。
小提琴图是通过使用密度曲线描述一组或多组的数值数据分布。每条曲线的宽度对应于各区域数据点的近似频率。通常密度会随附一种叠加的图表类型,如箱形图,以提供一些其他的数据信息,即矩形上下边框代表第一个和第三个四分位数,中间点是中位数。
小提琴图可以用来观察数据的分布情况,也可用于比较多个组之间的分布。每个组的密度曲线的波峰、谷线和尾部可以进行比较,以确定哪些组是相似的,哪些组是不同的。
ggstatsplot
首先向大家介绍一个小编最喜欢的小提琴图绘图方法ggstatsplot包里的ggbetweenstats,绘制的是箱式图和小提琴图的组合,而且自带统计分析。目前,它支持的统计检验类型有:参数检验、非参数检验、鲁棒性检验和贝叶斯T检验/方差分析、相关分析、列联表分析和回归分析。
1. 箱式图小提琴图的组合图
代码语言:javascript复制install.packages("ggstatsplot")
library(ggstatsplot)
data(mtcars)
代码语言:javascript复制ggbetweenstats(
data = mtcars,
x = am,
y = mpg,
plot.type = "boxviolin",
#绘图类型,boxviolin是小提琴加箱式图
type = "parametric",
#统计类型
pairwise.annotation = "p.value",
#用于成对比较的注释字符,或"asterisk"
p.adjust.method = "holm",
#p值校正方法
notchwidth = 0.5,
#对于有缺口的箱形图,缺口相对于主体的宽度(默认为0.5)
linetype = "solid",
title = "Fuel efficiency by type of car transmission",
caption = "Transmission (0 = automatic, 1 = manual)",
)
2. 小提琴图
代码语言:javascript复制ggbetweenstats(
data = mtcars,
x = am,
y = mpg,
plot.type = "violin",
type = "parametric",
pairwise.annotation = "p.value",
p.adjust.method = "holm",
linetype = "solid",
title = "Fuel efficiency by type of car transmission",
caption = "Transmission (0 = automatic, 1 = manual)",
)
vioplot
vioplot是常用的绘制小提琴图的R包,可在一个页面直接绘制多组图,喜欢简洁风格的小伙伴可以试试这个。这里的小提琴图是箱形图和核密度图的组合。
代码语言:javascript复制install.packages("vioplot")
library(vioplot)
data("diamonds", package = "ggplot2")
fix(diamonds)
代码语言:javascript复制palette <- RColorBrewer::brewer.pal(9, "Pastel1")
par(mfrow=c(3, 1))
#一个图版显示3行,1列
vioplot(price ~ cut, data = diamonds, las = 2, col = palette)
#根据cut分组展示price
#las= 1是水平展示横坐标标签,las = 2为纵向展示
vioplot(price ~ clarity, data = diamonds, las = 2, col = palette)
vioplot(price ~ color, data = diamonds, las = 2, col = palette)
ggplot2
代码语言:javascript复制library(ggplot2)
data("diamonds")
ggplot(diamonds, aes(x=cut, y=price))
geom_violin(trim=FALSE,aes(fill=factor(cut)))
#"trim"为TRUE(默认值),将小提琴的尾部修剪到数据范围。如果为FALSE,不修剪尾部。
geom_boxplot(width=0.1,position=position_dodge(0.8)) #绘制箱线图
theme_bw()
#背景变为白色
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
#不显示网格线
panel.border = element_blank(),
#去除外框线
axis.line = element_line(colour = "black",size=2)
#将x轴和y轴加粗显示
)
2.
代码语言:javascript复制library(hrbrthemes)#ggplot2的主题和相关组件包
library(viridis) #是Matplotlib的新默认颜色映射
ggplot(diamonds, aes(x=cut, y=price))
geom_violin(trim=FALSE,aes(fill=factor(cut)),)
#geom_boxplot(width=0.1,position=position_dodge(0.8)) #绘制箱线图
scale_fill_viridis(discrete=TRUE) #生成一个离散的调色板
theme_ipsum() #使用Arial Narrow字体
theme(
legend.position="none" #不加图例
)
coord_flip() #翻转坐标
ggnormalviolin
ggnormalviolin是使用ggplot2根据指定的均值和标准差创建正态分布的小提琴图的方法,这个函数可以用来表示假设的正态分布和置信区间。
代码语言:javascript复制install.packages("ggnormalviolin")
library(ggplot2)
library(ggnormalviolin)
library(ggthemes) #图形背景主题包
#建一个用于绘图的数据框
d <- data.frame(
Distribution = c("A", "B"),
Distribution_mean = c(80, 90),
Distribution_sd = c(15, 10))
d
代码语言:javascript复制ggplot(data = d, aes(x = Distribution))
geom_normalviolin(aes(mu = Distribution_mean,
#mu是正态分布的均值
sigma = Distribution_sd),
#sigma是正态分布的标准差
width=0.5,
#小提琴图的宽
color="black",
#小提琴图外框线的颜色
size=2,
#小提琴图外框线的粗细
linetype=2,
#小提琴图外框线的类型
fill="yellow"
#fill=c("yellow","red")
#小提琴图内部填充的颜色
)
theme_wsj() #换主题
ggpubr
1.小提琴加箱式图
代码语言:javascript复制install.packages("ggpubr")
library(ggpubr)
data("ToothGrowth")
df <- ToothGrowth
ggviolin(df, "dose", "len", color = "dose",
palette = c("#00AFBB", "#E7B800", "#FC4E07"), #颜色
add = "boxplot"
#小提琴加箱式图
)
2.小提琴加散点图
代码语言:javascript复制ggviolin(df, "dose", "len", color = "dose",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "dotplot"
#小提琴加散点图
)
3. 多组比较
代码语言:javascript复制ggviolin(df, "dose", "len", color = "supp",
palette = c("#00AFBB", "#E7B800"), add = "boxplot")
小编总结
写文章时,对样本的分布进行展示和统计分析,小提琴图都是个不错的选择,而且简单易绘制,大家可以借鉴哦~