导语
GUIDE ╲
我们平时说的小提琴图其实是箱式图与核密度图的结合,箱式图展示了分位数的位置,小提琴图则展示了任意位置的密度,小提琴图可以展示密度较高 的位置。下面我们一起来看看几种绘图R包。
小提琴图是通过使用密度曲线描述一组或多组的数值数据分布。每条曲线的宽度对应于各区域数据点的近似频率。通常密度会随附一种叠加的图表类型,如箱形图,以提供一些其他的数据信息,即矩形上下边框代表第一个和第三个四分位数,中间点是中位数。
小提琴图可以用来观察数据的分布情况,也可用于比较多个组之间的分布。每个组的密度曲线的波峰、谷线和尾部可以进行比较,以确定哪些组是相似的,哪些组是不同的。
ggstatsplot
首先向大家介绍一个小编最喜欢的小提琴图绘图方法ggstatsplot包里的ggbetweenstats,绘制的是箱式图和小提琴图的组合,而且自带统计分析。目前,它支持的统计检验类型有:参数检验、非参数检验、鲁棒性检验和贝叶斯T检验/方差分析、相关分析、列联表分析和回归分析。
1. 箱式图小提琴图的组合图
install.packages("ggstatsplot") library(ggstatsplot) data(mtcars)
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. 小提琴图
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包,可在一个页面直接绘制多组图,喜欢简洁风格的小伙伴可以试试这个。这里的小提琴图是箱形图和核密度图的组合。
install.packages("vioplot") library(vioplot) data("diamonds", package = "ggplot2") fix(diamonds)
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
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.
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根据 指定的均值和标准差创建正态分布的小提琴图的方法,这个函数可以用来表示假设的正态分布和置信区间。
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
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.小提琴加箱式图
install.packages( "ggpubr") library(ggpubr) data( "ToothGrowth") df <- ToothGrowthggviolin(df, "dose", "len", color = "dose", palette = c( "#00AFBB", "#E7B800", "#FC4E07"), #颜色add= "boxplot"#小提琴加箱式图)
2.小提琴加散点图
ggviolin(df, "dose", "len", color = "dose",palette = c("#00AFBB", "#E7B800", "#FC4E07"),add = "dotplot"#小提琴加散点图)
3. 多组比较
ggviolin(df, "dose", "len", color = "supp",palette = c("#00AFBB", "#E7B800"), add = "boxplot")
小编总结
写文章时,对样本的分布进行展示和统计分析,小提琴图都是个不错的选择,而且简单易绘制,大家可以借鉴哦~
感谢您的关注,祝您科研顺利!