1.1 定义
小提琴图可以可视化一个或多个组的数值变量的分布。非常适合大型数据集,可用于替换箱线图。
每个“小提琴”代表一个组或一个变量。该形状表示变量的密度估计值:特定范围内的数据点越多,该范围内的小提琴就越宽。它非常接近箱线图,但可以更深入地了解分布。
https://www.data-to-viz.com/graph/violin.html
1.2 实现
1.2.1 ggplot2
ggplot2-geom_violin()
library(ggplot2)
# create a dataset
data <- data.frame(
name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100) ),
value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) )
)
# Most basic violin chart
p <- ggplot(data, aes(x=name, y=value, fill=name)) + # fill=name allow to automatically dedicate a color for each group
geom_violin()
#p
关于输入格式的说明
long format:一行代表一次观测,对一个对象不同时刻的观测分布在不同的行之中
X axis: it needs to be have the class factor
Y axis: it needs to have the class numeric
# Basic violin
ggplot(data, aes(x=name, y=value, fill=name)) +
geom_violin()
wide format:一行不代表一次观测,对一个对象不同时刻的观测集中在同一行之中
需要用tidyr 库的 gather() 函数转换
data_wide <- iris[ , 1:4]
#R内置数据集Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
#其它比较流行的数据集还有Adult,Wine,Car Evaluation等。
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
library(tidyr)
library(ggplot2)
library(dplyr)
data_wide %>%
gather(key="MesureType", value="Val") %>%
ggplot( aes(x=MesureType, y=Val, fill=MesureType)) +
geom_violin()
#%>% (向右操作符,forward-pipe operator)是最常用的一种操作符,就是把左侧准备的数据或表达式,传递给右侧的函数调用或表达式进行运行,可以连续操作就像一个链条一样。现实原理如下图所示,使用%>%把左侧的程序的数据集A传递右侧程序的B函数,B函数的结果数据集再向右侧传递给C函数,最后完成数据计算。
#gather在这的功能是行列转置,即将行名转置为第一列"MesureType",其他测量数值转化为第二列"Val"
#简单看一下数据情况
dd1 <- data_wide %>%
gather(key="MesureType", value="Val")
head(dd1)
MesureType Val
1 Sepal.Length 5.1
2 Sepal.Length 4.9
3 Sepal.Length 4.7
4 Sepal.Length 4.6
5 Sepal.Length 5.0
6 Sepal.Length 5.4
#ggplot2的简单用法
#aes 指定参与作图的每个变量分别映射到哪些图形特性, 比如映射为x坐标、y坐标、颜色、形状等。 这些映射称为aesthetic mappings或aesthetics,fill一般是填颜色,这个时候就参数应该是分组。
后续会不定时更新,关注不迷路~