诚信认证:
工商注册信息已核实!作为一名科研工作者,本期小鹿为大家分享科研中的“小浪漫”—在我们的科研文章中经常可以看见的小提琴图。用R语言快速绘制小提琴图的方法,赶紧查收这份属于科研人的“小浪漫”吧!
小提琴图(vioplot)
小提琴图(vioplot),顾名思义小提琴图的形状像一把小提琴。但其实,小提琴图是由箱线图(boxplot)和密度图(density plot)组成的。所以它表达的信息比箱线图更多一些。
图 |小提琴图在《cell》文章中的应用
本次我们选用R包:vioplot绘制小提琴图,vioplot是一个强大的工具,以帮助研究人员可视化数据,特别是在质量检查和探索部分的分析。小提琴图有很多好处:
1.与boxplot图绘制相比,vioplot的绘制有更大的灵活性;
2.与boxplot相比,小提琴图增加了密度图这一维度信息;
3.与现有的图形相比,小提琴图更容易直接比较数据类型;
R语言—小提琴绘制法
用R语言实现小提琴绘制方法如下(有代码说明和结果展示),建议使用Rstudio:
01:设置当前工作目录
setwd("./vioplot/")
02:安装和导入R包:vioplot
install.packages(vioplot)
library(vioplot)
# 载入需要的程辑包:sm
# Package 'sm', version 2.2-5.6: type help(sm) for summary information
# 载入需要的程辑包:zoo
#
# 载入程辑包:‘zoo’
#
# The following objects are masked from ‘package:base’:
#
# as.Date, as.Date.numeric
03:R包:vioplot简介
R包描述
# Package: vioplot
# Title: Violin Plot
# Version: 0.3.4
# Date: 2019-11-30
# Authors@R: c(person("Daniel", "Adler", email = "dadler@uni-goettingen.de", role = c("aut", "cph")),
# person("S. Thomas", "Kelly", email = "tom.kelly@riken.jp", role = c("aut", "cre")),
# person("Tom M.", "Elliott", email = "tom.elliott@auckland.ac.nz", role = c("ctb")))
# Description: A violin plot is a combination of a box plot and a kernel density plot. This package allows extensive customisation of violin plots.
主要函数
ls(package:vioplot) # vioplot包中只有一个函数,说明这个函数中的参数可能有很多
# [1] "vioplot"
# Warning message:
# In ls(package:vioplot) : ‘package:vioplot’被转换成字符串
04:Customising Violin Plots小提琴图的定制
vioplot包是专门用来绘制小提琴图的R包,我们接下来看一下它的功能和各参数的用法
#@ 测试数据:鸢尾花数据iris
data("iris") # 载入R内置数据
class(iris) # 查看iris的数据集类型
# [1] "data.frame"
dim(iris) # 获取iris的数据维度信息
# [1] 150 5
head(iris) # 获取iris的前6行
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
str(iris) # 查看iris的数据集结构
# 'data.frame': 150 obs. of 5 variables:
# $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
默认参数绘制小提琴图
vioplot(iris$Sepal.Length[iris$Species=="setosa"], iris$Sepal.Length[iris$Species=="versicolor"], iris$Sepal.Length[iris$Species=="virginica"], names=c("setosa", "versicolor", "virginica"))
定制个性化的小提琴图
通过参数指定填充颜色、边框颜色、中点的颜色和形状,最后用legend函数为小提琴图填加图例。
vioplot()参数说明:
(1)main 为小提琴图填加主题,例如:main = “Sepal Length”
(2)col 指定小提琴的填充颜色,可以是任意R支持的颜色,而且可以根据小提琴分组决定同种或不同种的填充颜色,例如:col = “lightblue”,或col = c("lightgreen", "lightblue", "palevioletred")
(3)border 设置小提琴边框的颜色,例如:border="royalblue"
(4)lineCol设置小提琴图的boxplot轮廓(包括盒须)颜色,举例:lineCol = violetred紫罗蓝色
(5)rectCol 设置小提琴图的将boxplot填充颜色, 举例:rectCol = lightblue亮蓝色
(6)colMed 设置中点的颜色,例如:colMed = “red”,中点设置为红色
(7)pchMed 设置中点的形状,例如:pchMed = c(15, 17, 19),三个小提琴中点的形状分别为正方形、三角形和圆形
legend()是R语言基础函数,使用方法比较简单易理解,很多参数是在R基础函数中通用的,用法举例如下:
legend("topleft", legend=c("setosa", "versicolor", "virginica"), fill=c("lightgreen", "lightblue", "palevioletred"), cex = 1) # 图例的位置、内容和字体大小都是可以灵活定制的
优化参数定制美观的小提琴图
最后再加上图例和对每个小提琴进行不同颜色区别的参数,就可以绘制出美观的小提琴图了。
vioplot(iris$Sepal.Length[iris$Species=="setosa"], iris$Sepal.Length[iris$Species=="versicolor"], iris$Sepal.Length[iris$Species=="virginica"], names=c("setosa", "versicolor", "virginica"), main="Sepal Length (Equal Area)", areaEqual = T, col=c("lightgreen", "lightblue", "palevioletred"), border=c("darkolivegreen4", "royalblue4", "violetred4"), rectCol=c("forestgreen", "blue", "palevioletred3"), lineCol=c("darkolivegreen", "royalblue", "violetred4"), colMed=c("green", "cyan", "magenta"), pchMed=c(15, 17, 19)) # 绘制小提琴图
legend("topleft", legend=c("setosa", "versicolor", "virginica"), fill=c("lightgreen", "lightblue", "palevioletred"), cex = 1) # 添加图例。
05:R语言—小提琴图的浪漫邂逅 |
用vioplot包绘制小提琴图非常方便,而且函数vioplot的使用并不复杂,整体使用思路和方法与R基础绘图函数一致,有很好的通用性,适合科研工作者自己上手绘制自己的小提琴图。当然,R中还有ggplot2包可以绘制小提琴图,感兴趣的朋友可以自己探究一下。
附录:版本信息
sessionInfo() # R和R包的版本信息
# R version 3.6.2 (2019-12-12)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 10 x64 (build 18363)
#
# Matrix products: default
#
# locale:
#[1]LC_COLLATE=Chinese (Simplified)_China.936
#[2]LC_CTYPE=Chinese (Simplified)_China.936
# [3] LC_MONETARY=Chinese (Simplified)_China.936
# [4] LC_NUMERIC=C
# [5] LC_TIME=Chinese (Simplified)_China.936
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods
# [7] base
#
# other attached packages:
# [1] vioplot_0.3.4 zoo_1.8-7 sm_2.2-5.6
#
# loaded via a namespace (and not attached):
# [1] compiler_3.6.2 tools_3.6.2 grid_3.6.2
# [4] packrat_0.5.0 lattice_0.20-38 tcltk_3.6.2
END