一文掌握小提琴图的所有画法

2022-03-29 14:45:11 浏览数 (1)

导语

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

小编总结

写文章时,对样本的分布进行展示和统计分析,小提琴图都是个不错的选择,而且简单易绘制,大家可以借鉴哦~

0 人点赞