前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文掌握小提琴图的所有画法

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

作者头像
作图丫
发布2022-03-29 14:45:11
2.6K0
发布2022-03-29 14:45:11
举报
文章被收录于专栏:作图丫

导语

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

小编总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档