1.1 定義
小提琴圖可以可視化一個或多個組的數(shù)值變量的分布。非常適合大型數(shù)據(jù)集,可用于替換箱線圖。
每個“小提琴”代表一個組或一個變量。該形狀表示變量的密度估計(jì)值:特定范圍內(nèi)的數(shù)據(jù)點(diǎn)越多,該范圍內(nèi)的小提琴就越寬。它非常接近箱線圖,但可以更深入地了解分布。
https://www.data-to-viz.com/graph/violin.html
1.2 實(shí)現(xiàn)
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
關(guān)于輸入格式的說明
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() 函數(shù)轉(zhuǎn)換
data_wide <- iris[ , 1:4]
#R內(nèi)置數(shù)據(jù)集Iris數(shù)據(jù)集是常用的分類實(shí)驗(yàn)數(shù)據(jù)集,由Fisher, 1936收集整理。Iris也稱鳶尾花卉數(shù)據(jù)集,是一類多重變量分析的數(shù)據(jù)集。數(shù)據(jù)集包含150個數(shù)據(jù)樣本,分為3類,每類50個數(shù)據(jù),每個數(shù)據(jù)包含4個屬性。可通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預(yù)測鳶尾花卉屬于(Setosa,Versicolour,Virginica)三個種類中的哪一類。
#其它比較流行的數(shù)據(jù)集還有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)是最常用的一種操作符,就是把左側(cè)準(zhǔn)備的數(shù)據(jù)或表達(dá)式,傳遞給右側(cè)的函數(shù)調(diào)用或表達(dá)式進(jìn)行運(yùn)行,可以連續(xù)操作就像一個鏈條一樣?,F(xiàn)實(shí)原理如下圖所示,使用%>%把左側(cè)的程序的數(shù)據(jù)集A傳遞右側(cè)程序的B函數(shù),B函數(shù)的結(jié)果數(shù)據(jù)集再向右側(cè)傳遞給C函數(shù),最后完成數(shù)據(jù)計(jì)算。
#gather在這的功能是行列轉(zhuǎn)置,即將行名轉(zhuǎn)置為第一列"MesureType",其他測量數(shù)值轉(zhuǎn)化為第二列"Val"
#簡單看一下數(shù)據(jù)情況
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坐標(biāo)、y坐標(biāo)、顏色、形狀等。 這些映射稱為aesthetic mappings或aesthetics,fill一般是填顏色,這個時候就參數(shù)應(yīng)該是分組。
后續(xù)會不定時更新,關(guān)注不迷路~