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一般是填顔色,這個時候就參數應該是分組。
後續會不定時更新,關注不迷路~