天天看點

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

大部分進階繪圖函數均有add參數(plot函數沒有)。如果add=FALSE(預設),則在新視窗中建立一個圖形;如果add=TRUE,則在目前活動視窗中的原有圖形之上疊加圖形。在基礎包中,R提供了繪制常見圖形的功能,包括散點圖、氣泡圖、柱狀圖、餅圖、線圖,也提供了一些專業的統計圖形,如莖葉圖、Q-Q圖等。表3-9列出了基礎包中可以繪制的一些圖形。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數
《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

1.散點圖

R中建立散點圖的基礎函數是plot(x,y),其中x和y是數值型向量,代表圖形中的(x,y)點。如果樣本變量隻有一個,則需要把x參數設定為樣本資料。

下面通過兩個小例子來示範。執行以下代碼得到的結果如圖3-17所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

因為左圖繪制的是一維資料,是以将資料賦予x參數;右圖是二維資料,R将women資料框的第一列變量(height)賦予x參數,第二列變量(weight)賦予y參數,并将變量名作為坐标軸标簽。

2.散點圖矩陣

散點圖矩陣是散點圖的高維擴充,它從一定程度上克服了在平面上展示高維資料的困難,在展示多元資料的兩兩關系時有着不可替代的作用。R中有多種繪制散點圖矩陣的函數。plot函數可以繪制散點圖矩陣,此外基礎包還有專門繪制散點圖矩陣的pairs函數。

當把超過兩列的資料框賦予plot函數時,就可以繪制散點圖矩陣。以鸢尾花資料集的前四列為例進行示範。執行以下代碼,得到的圖形如圖3-18所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

從散點圖矩陣可以看出,變量Petal.Length與變量Petal.Width有很強的正相關性。

也可以利用pairs函數實作圖3-18的效果。代碼如下。

散點圖一般隻能較好地展示二維資料,氣泡圖則是在其基礎上另外通過散點的大小來表達第三維變量的數值。同樣,也可以使用plot函數繪制氣泡圖,通過将第三個變量賦予參數cex來控制氣泡的大小。

從ggplot2包中的鑽石資料集diamonds中随機抽取500個樣本,繪制簡單氣泡圖進行示範。執行以下代碼得到的結果如圖3-19所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

也可以用symbols函數來建立氣泡圖。該函數可以在指定的(x,y)坐标上繪制圓圈圖、方形圖、星形圖、溫度計圖和箱線圖。以繪制圓圈圖為例:symbols(x,y,circle=r),其中x、y和circle參數是需要設定的向量,分别表示x軸、y軸和圓圈半徑。

現在通過一個小例子來示範。執行以下代碼得到的結果如圖3-20所示。

設定plot函數的type參數,将散點圖上的點從左往右連接配接起來,就會得到一個線圖。在繪制線圖時,type參數可以設定的值如表3-10所示。

執行以下代碼,檢視不同類型線圖的效果。結果如圖3-21所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數
《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數
《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

在R中用barplot函數可以繪制柱狀圖和條形圖。barplot函數的主要參數如表3-11所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

對1940年弗吉尼亞州的死亡率的資料VADeaths繪制柱狀圖和條形圖,通過參數horiz來控制。執行如下代碼得到的結果如圖3-22所示。

由于多個柱子水準并列展示,是以需要添加圖例友善解讀資料。可以設定legend.text參數來實作。執行以下代碼得到的結果如圖3-23所示。

餅圖為一個由許多扇形組成的圓,各個扇形的大小比例等于變量各水準的頻數比例。餅圖比條形圖簡單,描述比例較直覺。其基本形式為:

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

其中x為畫圖的非負數值向量,label為生成标簽表達式。

如果想檢視mtcars資料集中cyl不同數值的占比。執行以下代碼得到的結果如圖3-24所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

直方圖是定量變量常用的圖表之一。其做法是,把橫坐标分成若幹通常是等寬度的區間,然後計算資料在各個區間上的頻數,并在各區間上畫出高度與資料在相應區間的頻數成比例的矩形條。縱坐标當然也可能是比例而不一定是頻數,但這并不改變圖的形狀,隻是縱坐标機關的不同。可以使用hist()函數建立直方圖。

hist函數的基本形式為his(x,…),hist函數的主要參數如表3-12所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

下面舉例說明如何利用hist()繪制直方圖。

對ggplot2包自帶的美國經濟資料economics的個人儲蓄率和一周内平均失業持續時間繪制直方圖。對psavert和uempmed分别繪制了兩個圖,一個有較少的區間,一個有較多的區間,可以很清楚地看出區間劃分對直方圖的影響。執行以下代碼得到的結果如圖3-25所示。

有一種與直方圖有密切關系的圖,即密度圖。很多統計學家都建議用密度圖代替直方圖,因為密度圖更容易解讀。首先要用density函數計算核密度估計量,然後用plot函數畫出估計量。其基本形式為plot(density(x))。

核密度圖經常會加上rug。rug是用于繪制坐标軸密度線的函數,實際上就是在坐标軸上添加一條圖形,用短線段表示一個點。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

繼續以economics為例,繪制個人儲蓄率的核密度圖,并添加軸須圖。執行以下代碼得到的結果如圖3-26所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

Q-Q(Quantile-Quantile)圖會将樣本資料的分布與理論分布(通常是正态分布)做比較,即Q-Q圖會畫出樣本的分位數和理論分布的分位數。如果樣本資料的分布和理論分布一緻,那麼所有的點都會在從左下角到右上角的45°對角線上。Q-Q圖可以有效地判斷實際分布和期望分布的差異。在R中可以用qqnorm函數繪制Q-Q圖。

繼續以economics為例,繪制個人儲蓄率的Q-Q圖。執行以下代碼得到的結果如圖3-27所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

箱線圖(又稱盒形圖)通過繪制連續變量的最小值、下四分位數Q1(第25百分位數)、中位數(第50百分位數)、上四分位數Q3(第75百分位數)以及最大值,描述連續型變量的分布。它是由一個盒子(box)和兩邊各一條線(whisker)組成。如果箱線圖是豎直的,那麼盒子上下邊分别代表Q1和Q3,顯然,有約一半的中間大小的資料值落在盒子的範圍内。在盒子中間有一條線,這是中位數,盒子的長度等于上下四分位數之差,稱為四分位間距或四分位極差(IQR)。在1.5倍IQR範圍外的點,箱線圖都識别為異常值,故箱線圖也是異常值甄别常用的手段之一。在R基礎包中用boxplot函數可以繪制箱線圖。

以鸢尾花資料集iris為例,繪制花萼長度按照物種分類的箱線圖。執行以下代碼得到的結果如圖3-28所示。

可見,種類setosa的資料整體明顯低于其他兩個種類,且種類virginica有一個異常點,故箱線圖也是用來識别一組資料是否有異常點的常用方法之一。

莖葉圖(stem-and-leaf plot)在資料量不大的情況下,既顯示了完整的原始資料,又顯示了資料分布的狀态,它像一片帶有長短不一的葉子的莖。在R中用stem函數繪制莖葉圖。

以汽車資料集mtcars資料的汽車重量wt為例進行說明。執行以下代碼。

結果中的第一行1 | 5689表示wt資料有1.5、1.6、1.8、1.9,其他行以相同方式解讀。

點圖提供了一種在簡單水準刻度上繪制大量有标簽值的方法,可以用dotchart函數建立點圖。其基本格式為:dotchart(x,labels=)。其中x是一個數值向量,labels是由每個點的标簽組成的向量。

繼續以汽車資料集mtcars的每加侖英裡數mpg資料為例進行說明。執行以下代碼得到的結果如圖3-29所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

馬賽克圖常用于描繪列聯表那樣的資料。R基礎包中的mosaicplot()函數可以繪制馬賽克圖。

以Titanic資料集為例,它包含了存活或者死亡的乘客數,乘客的船艙等級、性别以及年齡層。執行以下代碼,檢視分類細節。

執行以下代碼繪制馬賽克圖,結果如圖3-30所示。

從上面的馬賽克圖可以看出,大部分孩子都處在二等艙和三等艙;在頭等艙的大部分女性都存活下來,而三等艙中僅有一半女性存活。

除了基礎包中的mosaiplot函數可以繪制馬賽克圖外,vcd包中的mosaic( )函數也可以繪制馬賽克圖,它具有更多擴充功能。

同樣以Titanic資料集為例,執行以下代碼得到的馬賽克圖如圖3-31所示。

《R語言遊戲資料分析與挖掘》一3.3 進階繪圖函數

擴充的馬賽克圖添加了顔色和陰影面積來表示拟合模型的殘內插補點。藍色陰影表明,在假定生存率和船艙等級、性别和年齡段無關的條件下,該類别的生存率通常超過預期值。

繼續閱讀