第六篇:R語言數據可視化之數據分布圖(直方圖、密度曲線、箱線圖、等高線、2D密度圖)


數據分布圖簡介

        中醫上講看病四診法為:望聞問切。而數據分析師分析數據的過程也有點相似,我們需要望:看看數據長什么樣;聞:仔細分析數據是否合理;問:針對前兩步工作搜集到的問題與業務方交流;切:結合業務方反饋的結果和項目需求進行數據分析。

        "望"的方法可以認為就是制作數據可視化圖表的過程,而數據分布圖無疑是非常能反映數據特征(用戶症狀)的。R語言提供了多種圖表對數據分布進行描述,本文接下來將逐一講解。

繪制基本直方圖

        本例選用如下測試集:

        直方圖的橫軸為綁定變量區間分隔的取值范圍,縱軸則表示變量在不同變量區間上的頻數。繪制時只需將基函數的美學特征集中配置好需要分析的變量,然后創建新的直方圖圖層即可。R語言示例代碼如下:

# 基函數
ggplot(faithful, aes(x = waiting)) +
  # 直方圖函數:binwidth設置組距
  geom_histogram(binwidth = 5, fill = "lightblue", colour = "black")

        運行結果:

基於分組的直方圖

        本例選用如下測試集:

        直方圖的分組圖和本系列前面一些博文中講的一些分組圖不同,它不能進行水平方向的堆積 - 這樣看不出頻數變化趨勢;也不能進行垂直方向的堆積 - 這樣同樣看不出趨勢。這里采用一種新的堆積方法:重疊堆積,R語言實現代碼如下:

# 預處理:將smoke變量轉換為因子類型
birthwt$smoke = factor(birthwt$smoke)

# 基函數:x設置目標變量
ggplot(birthwt, aes(x = bwt, fill = smoke)) +
  # 直方圖函數:position設置堆積模式為重疊
  geom_histogram(position = "identity", alpha = 0.4)

        運行結果:

        也可以采用分面的方法,R語言實現代碼如下:

# 預處理1:將smoke變量轉換為因子類型
birthwt$smoke = factor(birthwt$smoke)
# 預處理2:改變因子水平名稱
birthwt$smoke = revalue(birthwt$smoke, c("0" = "No Smoke", "1" = "Smoke"))

# 基函數
ggplot(birthwt, aes(x = bwt)) +
  # 直方圖函數
  geom_histogram(fill = "lightblue", colour = "black") +
  # 分面函數:縱向分面
  facet_grid(smoke ~ .)

        運行結果:

繪制密度曲線

        本例選用如下測試集:

        密度曲線表達的意思和直方圖很相似,因此密度曲線的繪制方法和直方圖也幾乎是相同的。區別僅在於密度曲線的橫軸要綁定到連續型變量,另外繪制函數的名字不同。R語言示例代碼如下:

# 預處理:將smoke變量轉換為因子類型
birthwt$smoke = factor(birthwt$smoke)

# 基函數:x設置目標變量,fill設置填充色
ggplot(birthwt, aes(x = bwt, fill = smoke)) +
  # 密度曲線函數:alpha設置填充色透明度
  geom_density(alpha = 0.3)

        運行結果:

繪制基本箱線圖

        本例選用如下測試集:

        箱線圖是一種常用數據分布圖,下圖表示了這種圖中各元素的意義:

        繪制方法是在基函數中將變量分組綁定到橫軸,變量本身綁定到縱軸。此外,為了美觀也可以將分組綁定到fill變量並設置調色板。R語言示例代碼如下:

# 基函數
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
  # 箱線圖函數
  geom_boxplot() +
  # 顏色標尺
  scale_fill_brewer(palette = "Pastel2")

        運行結果:

往箱線圖添加槽口和均值

        在上一節繪制的基本箱線圖之上,還能進一步繪制以展示更多信息。

        其中最常見的是為箱子添加槽口,它能更清晰的表示中位數的位置。R語言實現代碼如下:

# 基函數
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
  # 箱線圖函數
  geom_boxplot(notch = TRUE) +
  # 顏色標尺
  scale_fill_brewer(palette = "Pastel2")

        運行結果:

        通過stat_summary()函數,還可以在箱線圖中標記均值點。R語言實現代碼如下:

# 基函數
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
  # 箱線圖函數
  geom_boxplot(notch = TRUE) +
  # 顏色標尺
  scale_fill_brewer(palette = "Pastel2")

        運行結果:

繪制2D等高線

        本例選用如下測試集:

        繪制2D等高線主要是調用stat_density()函數。這個函數會給出一個基於數據的二維核密度估計,然后我們可基於這個估計值來判斷各樣本點的"等高"性。接下來首先給出各數據點及等高線的繪制方法,R語言實現代碼如下:

# 基函數
ggplot(faithful, aes(x = eruptions, y = waiting)) +
  # 散點圖函數
  geom_point() +
  # 密度圖函數
  stat_density2d()

        運行結果:

        也可以通過設置密度函數美學特征集中的colour參數來給不同密度的等高線着色,R語言實現代碼如下:

# 基函數
ggplot(faithful, aes(x = eruptions, y = waiting)) +
  # 密度圖函數:colour設置等高線顏色
  stat_density2d(aes(colour = ..level..))

        運行結果:

繪制2D密度圖

        本例選用如下測試集:

        等高線圖也是密度圖的一種,因此繪制密度圖和等高線圖用的是同一個函數:stat_density(),只是它們傳入的參數不同。首先繪制經典柵格密度圖,R語言實現代碼如下:

# 基函數
ggplot(faithful, aes(x = eruptions, y = waiting)) +
  # 密度圖函數:fill設置填充顏色數據為密度,geom設置繪制柵格圖
  stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE)

        運行結果:

        也可以將密度變量映射到透明度來渲染,R語言實現代碼如下:

ggplot(faithful, aes(x = eruptions, y = waiting)) +
  # 散點圖函數
  geom_point() +
  # 密度圖函數:alpha設置填充透明度數據為密度,geom設置繪制柵格圖
  stat_density2d(aes(alpha = ..density..), geom = "raster", contour = FALSE)

        運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM