《R数据科学》学习笔记|Note2:使用ggplot2进行数据可视化(上)
點擊藍字
關注我!
寫在前面
本系列為《R數據科學》(R for Data Science)的學習筆記。相較于其他R語言教程來說,本書一個很大的優勢就是直接從實用的R包出發,來熟悉R及數據科學。更新過程中,讀者朋友如發現錯誤,歡迎指正。如果有疑問,也可以在評論區留言或后臺私信。希望各位讀者朋友能學有所得!
BOOK
1.1
簡介
本章將教你如何使用 ggplot2 進行數據可視化。R 有好幾種繪圖工具,但 ggplot2 是其中最優雅、功能最全面的一個。ggplot2 實現了圖形語法,這是一套用來描述和構建圖形的連貫性語法規則。掌握 ggplot2 后,你便可以在多個場景中使用,從而顯著提高工作效率。
準備工作
本章重點討論 tidyverse 的一個核心 R 包——ggplot2。為了訪問本章用到的數據集、幫助頁面和函數,需要先運行以下代碼來加載 tidyverse:
1library(tidyverse) 1>?library(tidyverse)2--?Attaching?packages?-----------------------------------------------------?tidyverse?1.3.0?--3√?ggplot2?3.3.3?????√?purrr???0.3.44√?tibble??3.0.4?????√?dplyr???1.0.25√?tidyr???1.1.2?????√?stringr?1.4.06√?readr???1.4.0?????√?forcats?0.5.07--?Conflicts?--------------------------------------------------------?tidyverse_conflicts()?--8x?dplyr::filter()?masks?stats::filter()9x?dplyr::lag()????masks?stats::lag() 10Warning?messages: 111:?程輯包‘tidyverse’是用R版本4.0.3?來建造的? 122:?程輯包‘tibble’是用R版本4.0.3?來建造的? 133:?程輯包‘tidyr’是用R版本4.0.3?來建造的? 144:?程輯包‘readr’是用R版本4.0.3?來建造的? 155:?程輯包‘dplyr’是用R版本4.0.3?來建造的? 166:?程輯包‘forcats’是用R版本4.0.3?來建造的1.2
第一步
我們使用第一張圖來回答問題:大引擎汽車比小引擎汽車更耗油嗎?
1.2.1
mpg數據框
可以使用ggplot2 包中的mpg 數據框(即 ggplot2::mpg)來檢驗自己的答案。數據框是變量(列)和觀測(行)的矩形集合。mpg 包含了由美國環境保護協會收集的 38 種車型的觀測數據。
1mpg2>?mpg3#?A?tibble:?234?x?114???manufacturer?model??????displ??year???cyl?trans??????drv?????cty???hwy?fl????class??5???<chr>????????<chr>??????<dbl>?<int>?<int>?<chr>??????<chr>?<int>?<int>?<chr>?<chr>??6?1?audi?????????a4???????????1.8??1999?????4?auto(l5)???f????????18????29?p?????compact7?2?audi?????????a4???????????1.8??1999?????4?manual(m5)?f????????21????29?p?????compact8?3?audi?????????a4???????????2????2008?????4?manual(m6)?f????????20????31?p?????compact9?4?audi?????????a4???????????2????2008?????4?auto(av)???f????????21????30?p?????compact 10?5?audi?????????a4???????????2.8??1999?????6?auto(l5)???f????????16????26?p?????compact 11?6?audi?????????a4???????????2.8??1999?????6?manual(m5)?f????????18????26?p?????compact 12?7?audi?????????a4???????????3.1??2008?????6?auto(av)???f????????18????27?p?????compact 13?8?audi?????????a4?quattro???1.8??1999?????4?manual(m5)?4????????18????26?p?????compact 14?9?audi?????????a4?quattro???1.8??1999?????4?auto(l5)???4????????16????25?p?????compact 1510?audi?????????a4?quattro???2????2008?????4?manual(m6)?4????????20????28?p?????compact 16#?...?with?224?more?rowsmpg 中包括如下變量。
? displ:引擎大小,單位為升。
? hwy:汽車在高速公路上行駛時的燃油效率,單位為英里 / 加侖(mpg)。與燃油效率高的汽車相比,燃油效率低的汽車在行駛相同距離時要消耗更多燃油。
1.2.2
創建ggplot圖形
為了繪制 mpg 的圖形,運行以下代碼將 displ 放在 x 軸,hwy 放在 y 軸:
1ggplot(data?=?mpg)?+ 2??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy))上圖顯示出引擎大小(displ)和燃油效率(hwy)之間是負相關關系。換句話說,大引擎汽車更耗油。
ggplot2 中,你可以使用 ggplot() 函數開始繪圖。
ggplot() 創建了一個坐標系,你可以在它上面添加圖層。ggplot() 的第一個參數是要在圖中使用的數據集。
ggplot(data = mpg)會創建一張空白圖,因為這張圖沒什么意思,所以就不在這里展示了。向 ggplot() 中添加一個或多個圖層就可以完成這張圖。
函數 geom_point() 向圖中添加一個點層,這樣就可以創建一張散點圖。
ggplot2 中包含了多種幾何對象函數,每種函數都可以向圖中添加不同類型的圖層。你將在本章中學到大量的幾何對象函數。
ggplot2 中的每個幾何對象函數都有一個 mapping 參數。這個參數定義了如何將數據集中的變量映射為圖形屬性。mapping 參數總是與 aes() 函數成對出現,aes() 函數的 x 參數和 y參數分別指定了映射到 x 軸的變量與映射到 y 軸的變量。ggplot2 在 data 參數中尋找映射變量,本例中就是 mpg。
1.2.3
繪圖模板
我們將上面的代碼轉換為一個可重用的 ggplot2 繪圖模板。要想生成一張圖,將以下代碼中的尖括號部分替換為數據集、幾何對象函數或映射集合即可:
1ggplot(data?=?<DATA>)?+ 2??<GEOM_FUNCTION>(mapping?=?aes(<MAPPINGS>))本章其余內容將向你展示如何完成并擴展這個模板,以制作出各種類型的圖。我們將從<MAPPINGS> 部分開始。
1.2.4
練習
(1) 運行 ggplot(data = mpg),你會看到什么?
(2) 數據集 mpg 中有多少行?多少列?
(3) 變量 drv 的意義是什么?使用? ?mpg 命令閱讀幫助文件以找出答案。
(4) 使用 hwy 和 cyl 繪制一張散點圖。
(5) 如果使用 class 和 drv 繪制散點圖,會發生什么情況?為什么這張圖沒什么用處?
1.3
圖形屬性映射
圖形屬性是圖中對象的可視化屬性,其中包括數據點的大小、形狀和顏色。通過改變圖形屬性的值,可以用不同的方式來顯示數據點。
通過將圖中的圖形屬性映射為數據集中的變量,可以傳達出數據的相關信息。例如,可以將點的顏色映射為變量 class,從而揭示每輛汽車的類型:
1ggplot(data?=?mpg)?+ 2?geom_point(mapping?=?aes(x?=?displ,?y?=?hwy,?color?=?class))(也可以用colour 代替 color)。
要想將圖形屬性映射為變量,需要在函數 aes() 中將圖形屬性名稱和變量名稱關聯起來。ggplot2 會自動為每個變量值分配唯一的圖形屬性水平(本例中是唯一的顏色),這個過程稱為標度變換。ggplot2 還會添加一個圖例,以表示圖形屬性水平和變量值之間的對應關系。
在上例中,我們將 class 映射為顏色,但也可以用同樣的方式將其映射為點的大小。在下面的示例中,每個點的實際大小表示其所屬的類別。這里我們收到一條警告信息,因為將無序變量(class)映射為有序圖形屬性(size)可不是好主意。
1ggplot(data?=?mpg)?+ 2??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy,?size?=?class)) 1Warning?message: 2Using?size?for?a?discrete?variable?is?not?advised.或者我們也可以將 class 映射為控制數據點透明度的 alpha 圖形屬性,還可以將其映射為點的形狀。
1#?上圖 2ggplot(data?=?mpg)?+ 3??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy,?alpha?=?class)) 4#?下圖 5ggplot(data?=?mpg)?+ 6??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy,?shape?=?class)) 1Warning?messages: 21:?The?shape?palette?can?deal?with?a?maximum?of?6?discrete?values?because?more?than?6 3becomes?difficult?to?discriminate;?you?have?7.?Consider?specifying?shapes?manually 4if?you?must?have?them.? 52:?Removed?62?rows?containing?missing?values?(geom_point).ggplot2 只能同時使用 6 種形狀。默認情況下,當使用這種圖形屬性時,多出的變量值將不會出現在圖中。
還可以手動為幾何對象設置圖形屬性。例如,我們可以讓圖中的所有點都為藍色:
1ggplot(data?=?mpg)?+ 2?geom_point(mapping?=?aes(x?=?displ,?y?=?hwy),?color?=?"blue")??顏色名稱是一個字符串。
? 點的大小用毫米表示。
? 點的形狀是一個數值,如圖所示。
1.4
分面
添加額外變量的一種方法是使用圖形屬性。另一種方法是將圖分割成多個分面,即可以顯示數據子集的子圖。這種方法特別適合添加分類變量。
要想通過單個變量對圖進行分面,可以使用函數 facet_wrap()。其第一個參數是一個公式,創建公式的方式是在 ~ 符號后面加一個變量名(這里所說的“公式”是 R 中的一種數據結構,不是數學意義上的公式)。傳遞給facet_wrap()的變量應該是離散型的。
1ggplot(data?=?mpg)?+ 2??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy))?+ 3??facet_wrap(~?class,?nrow?=?2) 4要想通過兩個變量對圖進行分面,需要在繪圖命令中加入函數 facet_grid()。這個函數的第一個參數也是一個公式,但該公式包含由 ~ 隔開的兩個變量名
1ggplot(data?=?mpg)?+ 2??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy))?+ 3??facet_grid(drv~?cyl)如果不想在行或列的維度進行分面,你可以使用 . 來代替變量名,例如 :
1ggplot(data?=?mpg)?+ 2??geom_point(mapping?=?aes(x?=?displ,?y?=?hwy))?+ 3??facet_grid(.~?cyl)— END —
往期 · 推薦
《R數據科學》學習筆記|Note1:緒論
零基礎"機器學習"自學筆記|Note6:正規方程及其推導(內附詳細推導過程)
零基礎"機器學習"自學筆記|Note5:多變量線性回歸
零基礎"機器學習"自學筆記|Note6:正規方程及其推導(內附詳細推導過程)
歡迎關注 木舟筆記
總結
以上是生活随笔為你收集整理的《R数据科学》学习笔记|Note2:使用ggplot2进行数据可视化(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Epicor 调拨方式平负数库存 直接生
- 下一篇: PCD文件格式的转换