R 語(yǔ)言繪制數(shù)據(jù):圖表篇
R 語(yǔ)言有非常多的繪圖和數(shù)據(jù)可視化的包,比如 ??graphics?
??、??lattice?
??、??ggplot2?
? 等。這是 R 語(yǔ)言系列的第 9 篇文章,我們會(huì)介紹 R 中用來(lái)繪圖的各種函數(shù)。
本文使用的 R 是 4.1.2 版本,運(yùn)行環(huán)境為 Parabola GNU/Linux-libre (x86-64)。
R 是自由軟件,沒(méi)有任何擔(dān)保責(zé)任。只要遵守 GNU 通用公共許可證的版本 2 或者版本 3,你就可以對(duì)它進(jìn)行(修改和)再分發(fā)。詳情見(jiàn) ??https://www.gnu.org/licenses/??。
折線圖
我們以印度全境消費(fèi)者物價(jià)指數(shù)(CPI -- 鄉(xiāng)村/城市)數(shù)據(jù)集為研究對(duì)象,它可以從 ??https://data.gov.in/catalog/all-india-consumer-price-index-ruralurban-0??? 下載。選擇“截止到 2021 年 11 月” 的版本,用 ??read.csv?
? 函數(shù)讀取下載好的文件,如下所示:
以 Punjab 州為例,對(duì)每年各月份的 CPI 值求和,然后用 ??plot?
? 函數(shù)畫一張折線圖:
??plot?
? 函數(shù)可以傳入如下參數(shù):
參數(shù) | 描述 |
? | 向量類型,用于繪制 x 軸的數(shù)據(jù) |
? | 向量或列表類型,用于繪制 y 軸的數(shù)據(jù) |
? | 設(shè)置繪圖類型:? |
? | x 軸范圍 |
? | y 軸范圍 |
? | 標(biāo)題 |
? | 副標(biāo)題 |
? | x 軸標(biāo)題 |
? | y 軸標(biāo)題 |
? | 邏輯型,是否繪制坐標(biāo)軸 |
結(jié)果如圖 1。
Figure 1: Line chart
自相關(guān)圖
自相關(guān)圖能在時(shí)序分析中展示一個(gè)變量是否具有自相關(guān)性,可以用 R 中的 ??acf?
?? 函數(shù)繪制。??acf?
?? 函數(shù)可以設(shè)置三種自相關(guān)類型:??correlation?
??、??covariance?
?? 或 ??partial?
?。圖 2 是 Punjab 州 CPI 值的自相關(guān)圖,x 表示 CPI。
Figure 2: ACF chart
??acf?
? 函數(shù)可以傳入以下參數(shù):
參數(shù) | 描述 |
? | 一個(gè)單變量或多變量的時(shí)序?qū)ο?,或者一個(gè)數(shù)值向量或數(shù)值矩陣 |
? | 最大滯后階數(shù) |
? | 字符型,設(shè)置所計(jì)算的自相關(guān)類型:? |
? | 邏輯性,若 ? |
? | 一組要保留的時(shí)差滯后 |
? | 一組要保留的名稱或數(shù)字 |
柱狀圖
R 中畫柱狀圖的函數(shù)是 ??barplot?
?。下面的代碼用來(lái)畫 Punjab 州 CPI 的柱狀圖,如圖3:
Figure 3: Line chart of Punjab's CPI
??barplot?
? 函數(shù)的使用方法非常靈活,可以傳入以下參數(shù):
參數(shù) | 描述 |
? | 數(shù)值向量或數(shù)值矩陣,包含用于繪圖的數(shù)據(jù) |
? | 數(shù)值向量,用于設(shè)置柱寬 |
? | 柱間距 |
? | 邏輯型,若 ? |
? | 數(shù)值型,設(shè)置陰影線的填充密度(條數(shù)/英寸),默認(rèn)為 ? |
? | 數(shù)值型,填充線條的角度,默認(rèn)為 45 |
? | 柱形邊緣的顏色 |
? | 標(biāo)題 |
? | 副標(biāo)題 |
? | x 軸標(biāo)題 |
? | y 軸標(biāo)題 |
? | x 軸范圍 |
? | y 軸范圍 |
? | 邏輯型,是否繪制坐標(biāo)軸 |
用 ??help?
?? 命令可以查看 ??barplot?
? 函數(shù)的詳細(xì)信息:
餅圖
繪制餅圖時(shí)要多加注意,因?yàn)轱瀳D不一定能展示出各扇形間的區(qū)別。(LCTT 譯注:根據(jù)統(tǒng)計(jì)學(xué)家和一些心理學(xué)家的調(diào)查結(jié)果,這種以比例展示數(shù)據(jù)的統(tǒng)計(jì)圖形 ??實(shí)際上是很糟糕的可視化方式???,因此,R 關(guān)于餅圖的幫助文件中清楚地說(shuō)明了并不推薦使用餅圖,而是使用條形圖或點(diǎn)圖作為替代。) 用 ??subset?
? 函數(shù)獲得 Gujarat 州在 2021 年 1 月 Rural、Urban、Rurual+Urban 的 CPI 值:
使用 ??pie?
? 函數(shù)為 Gujarat 州的 CPI 值生成餅圖,如下所示:
Figure 4: Pie chart
??pie?
? 函數(shù)可以傳入以下參數(shù):
參數(shù) | 描述 |
`x | 元素大于 0 的數(shù)值向量 |
? | 字符向量,用于設(shè)置每個(gè)扇形的標(biāo)簽 |
? | 餅圖的半徑 |
? | 邏輯型,若 ? |
? | 數(shù)值型,設(shè)置陰影線的填充密度(條數(shù)/英寸),默認(rèn)為 ? |
? | 數(shù)值型,填充線條的角度,默認(rèn)為 45 |
? | 數(shù)值向量,用于設(shè)置顏色 |
? | 每個(gè)扇形的線條類型 |
? | 標(biāo)題 |
箱線圖
(LCTT 譯注:箱線圖主要是 ??從四分位數(shù)的角度出發(fā)?? 描述數(shù)據(jù)的分布,它通過(guò)最大值(Q4)、上四分位數(shù)(Q3)、中位數(shù)(Q2)、下四分位數(shù)(Q1)
和最小值(Q0)五處位置來(lái)獲取一維數(shù)據(jù)的分布概況。我們知道,這五處位置之間依次包含了四段數(shù)據(jù),每段中數(shù)據(jù)量均為總數(shù)據(jù)量的
1/4。通過(guò)每一段數(shù)據(jù)占據(jù)的長(zhǎng)度,我們可以大致推斷出數(shù)據(jù)的集中或離散趨勢(shì)。長(zhǎng)度越短,說(shuō)明數(shù)據(jù)在該區(qū)間上越密集,反之則稀疏。)
箱線圖能夠用“須線whisker” 展示一個(gè)變量的四分位距Interquartile Range(簡(jiǎn)稱 IQR=Q3-Q1)。用上下四分位數(shù)分別加/減內(nèi)四分位距,再乘以一個(gè)人為設(shè)定的倍數(shù) ??range?
??(見(jiàn)下面的參數(shù)列表),得到 ??range * c(Q1-IQR, Q3+IQR)?
?,超過(guò)這個(gè)范圍的數(shù)據(jù)點(diǎn)就被視作離群點(diǎn),在圖中直接以點(diǎn)的形式表示出來(lái)。
??boxplot?
? 函數(shù)可以傳入以下參數(shù):
參數(shù) | 描述 |
? | 數(shù)據(jù)框或列表,用于參數(shù)類型為公式的情況 |
? | 數(shù)值向量或者列表,若為列表則對(duì)列表中每一個(gè)子對(duì)象依次作出箱線圖 |
? | 設(shè)置箱子的寬度 |
? | 邏輯型,設(shè)置是否繪制離群點(diǎn) |
? | 設(shè)置每個(gè)箱子的標(biāo)簽 |
? | 設(shè)置每個(gè)箱子的邊緣的顏色 |
? | 延伸倍數(shù),設(shè)置箱線圖末端(須)延伸到什么位置 |
? | 邏輯型,設(shè)置是否生成圖像,若 TRUE 則生成圖像,若 FALSE 則打印傳入數(shù)據(jù)的描述信息 |
? | 邏輯型,設(shè)置箱線圖是否水平放置 |
用 ??boxplot?
? 函數(shù)繪制部分州的箱線圖:
Figure 5: Box plot
QQ 圖
QQ 圖Quantile-Quantile plot可以用來(lái)對(duì)比兩個(gè)數(shù)據(jù)集,也可以用來(lái)檢查數(shù)據(jù)是否服從某種理論分布。??qqnorm?
? 函數(shù)能繪制正態(tài)分布 QQ 圖,可以檢驗(yàn)數(shù)據(jù)是否服從正態(tài)分布,用下面的代碼繪制 Punjab 州 CPI 數(shù)據(jù)的 QQ 圖:
Figure 6: Q-Q plot
??qqline?
? 函數(shù)可以向正態(tài)分布 QQ 圖上添加理論分布曲線,它可以傳入以下參數(shù):
參數(shù) | 描述 |
? | 第一個(gè)數(shù)據(jù)樣本 |
? | 第二個(gè)數(shù)據(jù)樣本 |
? | 邏輯型,設(shè)置是否以 x 軸表示理論曲線的值,默認(rèn)為 ? |
? | 長(zhǎng)度為 2 的數(shù)值向量,代表概率 |
? | x 軸標(biāo)題 |
? | y 軸標(biāo)題 |
? | ? |
等高圖
等高圖可以描述三維數(shù)據(jù),在 R 中對(duì)應(yīng)的函數(shù)是 ??contour?
??,這個(gè)函數(shù)也可以用來(lái)向已有的圖表添加等高線。等高圖常與其他圖表一起使用。我們用 ??contour?
?? 對(duì) R 中的 ??volcano?
? 數(shù)據(jù)集(奧克蘭的火山地形信息)繪制等高圖,代碼如下:
Figure 7: Volcano
??contour?
? 函數(shù)的常用參數(shù)如下:
參數(shù) | 描述 |
? | z 中數(shù)值對(duì)應(yīng)的點(diǎn)在平面上的位置 |
? | 數(shù)值向量 |
? | 設(shè)置等高線的條數(shù),調(diào)整等高線的疏密 |
? | 等高線上的標(biāo)記字符串,默認(rèn)是高度的數(shù)值 |
? | 設(shè)置 x 軸的范圍 |
? | 設(shè)置 y 軸的范圍 |
? | 設(shè)置 z 軸的范圍 |
? | 設(shè)置是否繪制坐標(biāo)軸 |
? | 設(shè)置等高線的顏色 |
? | 設(shè)置線條的類型 |
? | 設(shè)置線條的粗細(xì) |
? | 設(shè)置標(biāo)簽字體 |
等高線之間的區(qū)域可以用顏色填充,每種顏色表示一個(gè)高度范圍,如下所示:
填充結(jié)果見(jiàn)圖 8。
Figure 8: Filled volcano
掌握上述內(nèi)容后,你可以嘗試 R 語(yǔ)言 ??graphics?
?? 包中的其他函數(shù)和圖表(LCTT 譯注:用 ??help(package=graphics)?
? 可以查看 graphics 包提供的函數(shù)列表)。