ggplot2-繪圖-箱線圖

前面的啰嗦

本教程對繪圖所需數(shù)據(jù)和繪圖過程進(jìn)行了一步步的解釋,稍顯啰嗦,沒時(shí)間細(xì)看或不想一步步看的朋友可以直接點(diǎn)擊目錄最后一節(jié):
箱線圖完整版代碼

繪圖數(shù)據(jù)說明

用到的數(shù)據(jù)是mpg數(shù)據(jù)集,這是ggplot2包自帶的數(shù)據(jù)集,可以使用以下代碼查看該數(shù)據(jù)集的基本情況:

library(ggplot2)
?mpg # 或者h(yuǎn)elp(mpg)

從幫助文檔中可以看出這是一個(gè)234x11的數(shù)據(jù)框,它記錄了美國1999年和2008年部分汽車的制造廠商,型號,類別,驅(qū)動(dòng)程序和耗油量等信息。
下面看一下這11列的情況:

library(ggplot2)
# str查看數(shù)據(jù)集的基本情況
str(mpg)
## tibble [234 x 11] (S3: tbl_df/tbl/data.frame)
##  $ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
##  $ model       : chr [1:234] "a4" "a4" "a4" "a4" ...
##  $ displ       : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ year        : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cyl         : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
##  $ trans       : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ drv         : chr [1:234] "f" "f" "f" "f" ...
##  $ cty         : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
##  $ hwy         : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
##  $ fl          : chr [1:234] "p" "p" "p" "p" ...
##  $ class       : chr [1:234] "compact" "compact" "compact" "compact" ...

每一列的解釋如下:

  • model: model name
  • displ: 發(fā)動(dòng)機(jī)排量(engine displacement, in litres)
  • year: 發(fā)行時(shí)間,僅有1999和2008
  • cyl: 汽缸數(shù)目(number of cylinders)
  • trans: 變速器類型(type of transmission)
  • drv: 表示驅(qū)動(dòng)程序,是一個(gè)分類變量,詳細(xì)解釋為:the type of drive
    train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd
  • cty: city miles per gallon,每加侖城市里程,耗油量的一種計(jì)量方式。
  • hwy: highway miles per
    gallon,每加侖公路行駛里程,也是耗油量的一種計(jì)量方式。

基本箱線圖

下面對hwy繪制箱線圖,查看這些汽車的耗油量分布情況。

library(ggplot2)
ggplot(data=mpg, aes(x="", y=hwy)) +
  geom_boxplot()
image

可以看到耗油量的中位數(shù)在25附近,其中有兩個(gè)離群點(diǎn),這兩輛汽車的耗油量很大。

這里繪制的圖是一個(gè)橫向的箱線圖,如果要繪制縱向的箱線圖(即上圖順時(shí)針旋轉(zhuǎn)90度),只需要改一下代碼中aes的參數(shù),設(shè)置為x=hwy即可,如下所示:

ggplot(data=mpg, aes(x=hwy, y="")) +
  geom_boxplot()
image

分組箱線圖

下面繪制一下分組箱線圖,看一下不同驅(qū)動(dòng)程序的汽車的耗油量分布,其中驅(qū)動(dòng)程序是mpg數(shù)據(jù)集中的drv變量,這是一個(gè)分類變量

class(mpg$drv)
## [1] "character"
table(mpg$drv)
## 
##   4   f   r 
## 103 106  25
ggplot(data=mpg, aes(x=factor(drv), y=hwy, fill=factor(drv))) +
  geom_boxplot()
image

由于mpg$drv的類別是character,而ggplot繪圖進(jìn)行分組所需要的變量類型是factor,因此需要將drv變量轉(zhuǎn)為factor類別,但這里存在一個(gè)問題,就是橫坐標(biāo)軸標(biāo)題出現(xiàn)了factor字樣,圖例的標(biāo)題中也出現(xiàn)了factor字樣,不是很美觀,這個(gè)問題的解決方法有兩個(gè):

  1. 直接對數(shù)據(jù)框的drv變量進(jìn)行修改,將其改為factor類別:
mpg_new <- mpg
mpg_new$drv <- as.factor(mpg_new$drv)
ggplot(data=mpg_new, aes(x=drv, y=hwy, fill=drv)) +
  geom_boxplot()
image
  1. 修改坐標(biāo)軸與圖例的標(biāo)題,將其修改為drv:
ggplot(data=mpg, aes(x=factor(drv), y=hwy, fill=factor(drv))) +
  geom_boxplot() + 
  scale_fill_discrete(name='drv') + 
  labs(x="drv") # x表示橫坐標(biāo)軸的標(biāo)題
image
  # scale_一系列的函數(shù)都是用來配置圖例的,scale_fill_discrete指的是修改fill的圖例,和aes中的fill相對應(yīng)。

美化分組箱線圖

上面的箱線圖存在一些地方不是很好看,主要有以下幾點(diǎn):

  1. 圖例的顏色與橫坐標(biāo)軸的三個(gè)標(biāo)簽信息是一致的,存在冗余,因此可以去掉圖例,去掉圖例的代碼為guides(fill=FALSE)
  2. 沒有添加標(biāo)題,可以在labs函數(shù)中添加標(biāo)題
  3. 所用主題可以優(yōu)化,可以使用theme_系列函數(shù)

下面使用mpg_new數(shù)據(jù)框進(jìn)行操作,避免不停的對drv列進(jìn)行操作。

mpg_new <- mpg
mpg_new$drv <- as.factor(mpg_new$drv)
ggplot(data=mpg_new, aes(x=drv, y=hwy, fill=drv)) +
  geom_boxplot() +
  guides(fill=FALSE) + # fill指的是圖例中的fill,和aes中對應(yīng)
  labs(title="Boxplot of highway miles per gallon") +
  theme_minimal() +
  theme(plot.title=element_text(hjust=0.5)) # 這一句讓標(biāo)題居中,ggplot2默認(rèn)的標(biāo)題是左對齊的
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
image

這里有一個(gè)warning,表示guides(<scale> = FALSE)這種用法已經(jīng)廢棄,這種用法是舊版本ggplot2的用法,新版本的應(yīng)使用guides(<scale> = "none")(我的ggplot2版本是3.3.5),修改后的代碼如下:

ggplot(data=mpg_new, aes(x=drv, y=hwy, fill=drv)) +
  geom_boxplot() +
  guides(fill="none") + # fill指的是圖例中的fill,和aes中對應(yīng)
  labs(title="Boxplot of highway miles per gallon") +
  theme_minimal() +
  theme(plot.title=element_text(hjust=0.5))  #這一句讓標(biāo)題居中,ggplot2默認(rèn)的標(biāo)題是左對齊的
image

這里有一點(diǎn)需要注意的是theme_minimaltheme兩個(gè)函數(shù)的順序,由于theme_minimal是一種簡化式的主題設(shè)置,ggplot2遵循圖層疊加的原理,如果將theme_minimal放在theme后面,那么圖標(biāo)標(biāo)題仍然是左對齊,而不是居中顯示。

箱線圖完整版代碼

基本箱線圖的完整代碼

  1. 橫向箱線圖
library(ggplot2)
ggplot(data=mpg, aes(x="", y=hwy)) +
  geom_boxplot() +
  labs(x="") # 去除橫坐標(biāo)軸的標(biāo)簽
image
  1. 縱向箱線圖
library(ggplot2)
ggplot(data=mpg, aes(x=hwy, y="")) +
  geom_boxplot() +
  labs(y="") # 去除縱坐標(biāo)軸的標(biāo)簽
image

分組箱線圖的完整代碼

# 首先將數(shù)據(jù)框中的drv修改為factor類型
library(ggplot2)
mpg_new <- mpg
mpg_new$drv <- as.factor(mpg_new$drv)

# 其次繪圖
ggplot(data=mpg_new, aes(x=drv, y=hwy, fill=drv)) +
  geom_boxplot() +
  guides(fill="none") + # fill指的是圖例中的fill,和aes中對應(yīng),fill=none表示不顯示圖例
  labs(title="Boxplot of highway miles per gallon") + # title是圖表標(biāo)題
  theme_minimal() +
  theme(plot.title=element_text(hjust=0.5))  #這一句讓圖表標(biāo)題居中,ggplot2默認(rèn)的標(biāo)題是左對齊的
image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容