R語言實戰(七)圖形進階


本文對應《R語言實戰》第11章:中級繪圖;第16章:高級圖形進階

基礎圖形一章,側重展示單類別型或連續型變量的分布情況;中級繪圖一章,側重展示雙變量間關系(二元關系)和多變量間關系(多元關系)的繪圖;高級繪圖進階一章介紹四種圖形系統,主要介紹lattice和ggplot2包。

=========================================================================

 

散點圖:

主要內容:把多個散點圖組合起來形成一個散點圖矩陣,以便可以同時瀏覽多個二元變量關系;數據點重疊的解決途徑;通過添加第三個連續型變量,擴展到三維。

散點圖矩陣:

pairs()函數

pairs(~ mpg + disp + drat + wt, data = mtcars, main = “basic scatter plot matrix”)

  

car包中的scatterplotMatrix()函數:

library(car)
scatterplotMatrix( ~ mpg + disp + drat + wt, data = mtcars, spread = FALSE, lty.smooth = 2)

  

默認添加線性和平滑曲線,主對角線處添加核密度曲線和軸須圖;spread選項設定是否添加展示分散度和對稱信息的直線;lty.smooth設定擬合曲線使用的線形狀。

另一個示例:

library(car)
scatterplotMatrix( ~ mpg + disp + drat + wt | cyl, data = mtcars, spread = FALSE, diagonal = “histogram”)

  

gclus包中的cpairs()函數提供了一個散點圖矩陣變種,可以重排矩陣中變量位置,讓相關度更高的變量更靠近主對角線,並對各單元格進行顏色編碼來展示變量間的相關性大小。這里將主對角線的核密度曲線改成了直方圖,並且直方圖是以cyl為條件繪制的。

library(gclus)
mydata <- mtcars[c(1, 3, 5, 6)]
mydata.corr <- abs(cor(mydata))
mycolors <- dmat.color(mydata.corr)
myorder <- order.single(mydata.corr)
cpairs(mydata, myorder, panel.colors = mycolors, gap = .5)

  


高密度散點圖:數據點重疊的解決途徑之一 

smoothScatter()函數可利用核密度估計生成用顏色密度來表示點分布的散點圖:

with(mydata, smoothScatter(x, y, main = “Scatterplot Colored by Smoothed Densities”))

 

hexbin包中的hexbin()函數將二元變量的封箱放到六邊形單元格中:

library(hexbin)
with(mydata, {
    bin <- hexbin(x, y, xbins = 50)
    plot(bin, main = “Hexagonal Bining with 10,000 Observations”)
})

  

IDPmisc包中的iplot()函數可以通過顏色來展示點的密度(在某特定點上數據點的數目)

library(IDPmisc)
with(mydata, iplot(x, y, main = “Image Scatter Plot with Color Indicating Density”))

  


三維散點圖: 

scatterplot3d包中的scatterplot3d()函數:

library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt, disp, mpg, main = “Basic 3D Scatter Plot”)

  

旋轉三維散點圖:
rgl包中的plot3d()函數創建可交互的三維散點圖。Rcmdr包中有類似的函數scatter3d()。

 

氣泡圖:

先創建一個二維散點圖,然后用點的大小來代表第三個變量的值。注意默認為半徑,如需使用面積需要進行變換。

 

symbols(x, y, circle = radius)
#使用面積表示第三個值
symbols(x, y, circle = sqrt(z/pi))

  

折線圖:

可用plot(x, y, type = )或者lines(x, y, type = )函數來創建

p

只有點

l

只有線

o

實心點和線(即線覆蓋在點上)

b, c

線連接點(c時不繪制點)

s, S

階梯線

h

直方圖式的垂直線

n

不生成任何點和線(通常用來為后面的命令創建坐標軸)

 

相關圖:

將相關系數矩陣進行可視化。corrgram包中的corrgram()函數:

library(corrgram)
corrgram(mtcars, order = TRUE, lower.panel = panel.shade, upper.panel = panel.pie, text.panel = panel.txt)

  


上三角的單元格用餅圖展示了相同的信息,同樣的,藍色表示正相關,紅色表示負相關;相關性大小由被填充的餅圖塊的大小來展示;正相關性將從12點鍾處開始順時針填充餅圖,負相關性則逆時針方向填充餅圖。圖形意義:默認情況下,下三角單元格中,藍色和從左下指向右上的斜杠表示單元格中的兩個變量呈正相關;紅色和從左上指向右下的斜杠表示變量呈負相關;色彩越深,飽和度越高,變量相關性越大。

order = TRUE時相關矩陣將使用主成分分析法對變量重排序,可以使二元變量的關系模式更為明顯。panel可以設定面板使用的元素類型:lower.panel和upper.panel設置主對角線下和上的元素類型;text.panel和diag.panel控制主對角線元素類型,詳細值如下表:

位置

面板選項

描述

非對角線

panel.pie

用餅圖的填充比例表示相關性大小

panel.shade

用陰影的深度來表示相關性大小

panel.ellipse

繪制置信橢圓

panel.pts

平滑擬合曲線繪制散點圖

主對角線

panel.minmax

輸出變量的最大最小值

panel.txt

輸出變量的名字

 

馬賽克圖:

用於展示類別型變量間的關系。馬賽克圖中,嵌套矩形面積正比於單元格頻率,其中該頻率即多維列聯表中的頻率。顏色和陰影可表示擬合模型的殘差值。常用vcd包中的mosaic()函數實現(比基礎安裝中的mosaicplot()函數有更多的擴展功能)。

圖形中隱藏大量信息,可以關注各個矩形的相對寬度和高度來解釋。顏色和陰影提供了擬合模型的殘差值:藍色代表在假定類別與條件無關的情況下,該類別的數量高於預期值,紅色則相反。

 

=========================================================================

R中有四種圖形系統:基礎圖形系統、grid圖形系統、lattice包、ggplot2包。

lattice包:

通常格式:graph_function(formula, data = , options)

graph_function為函數名,formula指定要展示的變量和條件變量;data指定數據框;options是逗號分隔參數,修改格式等。

一般的,下表中小寫字符代表數值型變量,大寫字符代表類別型變量。

圖形類型

函數

表達式示例

三維等高線圖

contourplot()

z ~ x*y

三維水平圖

levelplot()

z ~ y*x

三維散點圖

cloud()

z ~ x*y|A

三維線框圖

wireframe()

z ~ y*x

條形圖

barchart()

x ~ A或A ~ x

箱線圖

bwplot()

x ~ A或A ~ x

點圖

dotplot()

~ x | A

直方圖

histogram()

~ x

核密度圖

densityplot()

~ x | A*B

平行坐標圖

parallel()

dataframe

散點圖

xyplot()

y ~ x | A

散點圖矩陣

splom()

dataframe

帶狀圖

stripplot()

A ~ x或x ~ A

options:

aspect

數值,設定每個面板中圖形的寬高比

col/pch/lty/lwd

向量,分別設定圖形中的顏色、符號、線條類型和線寬

Groups

用來分組的變量(因子)

index.cond

列表,設定面板的展示順序

key(或auto.key)

函數,添加分組變量的圖例符號

layout

兩元素數值型向量,設定面板的擺放方式(行數和列數);

如有需要,可以添加第三個元素,以指定頁數

Main/sub

字符型向量,設定主標題和副標題

Panel

函數,設定每個面板要生成的圖形

Scales

列表,添加坐標軸標注信息

Strip

函數,設定面板條帶區域

Split/position

數值型向量,在一頁上繪制多幅圖形

Type

字符型向量,設定一個或多個散點圖的繪圖參數

(如p=點,l=線,r=回歸,smooth=平滑曲線,g=格點)

xlab/ylab

字符型向量,設定橫軸和縱軸標簽

xlim/ylim

兩元素數值型向量,分別設定橫軸和縱軸的最小和最大值

 

高級繪圖中表達式的通常格式:

y ~ x | A * B

豎線左邊的變量稱為主要變量,右邊稱為條件變量。主要變量即為圖形的兩個坐標軸,其中y在縱軸上,x在橫軸上。變形:單變量繪圖,用 ~ x 即可;三維繪圖,用z ~ x*y;多變量繪圖,使用數據框代替y ~ x即可。

條件變量的用法:~ x | A表示因子A各個水平下數值型變量x的分布情況;y ~ x | A * B表示因子A和B各個水平組合下數值型變量x和y之間的關系。A ~ x表示A在縱軸上展示,x在橫軸上展示。

條件變量為連續型變量時,要先將其轉換成離散型變量。一種方法是使用cut()函數,另外可以使用lattice包中的函數將連續型變量轉化為瓦塊(shingle)數據結構,這樣,連續型變量可以被分割為一系列(可能)重疊的數值范圍。

myshingle <- equal.count(x, number = #, overlap = proportion)
#連續型變量x將會被分割為#個區間,重疊度為proportion,每個區間內觀測數相等

  

這樣就可以使用這個變量作為條件變量了

 

分組變量:將每個條件變量產生的圖形疊加到一起,在同一幅圖中展示,只需要將條件變量放到繪圖函數中的group聲明中即可。

 

面板函數:自定義面板的各個選項,然后在繪制圖形的函數中調用即可。

 

圖形參數:查看默認的圖形參數使用trellis.par.get()函數;修改這些參數使用trellis.par.set()函數;show.settings()函數可以展示當前的圖形參數設置情況。

 

頁面擺放:lattice無法使用par()函數,因此需要將圖形存儲到對象中,然后利用plot()函數中的split = 或position = 選項來進行控制。

#split方法
library(lattice)
graph1 <- histogram(…)
graph2 <- densityplot(…)
plot(graph1, split = c(1,1,1,2))
plot(graph2, split = c(1,2,1,2), newpage = FALSE)

#position方法
library(lattice)
graph1 <- histogram(…)
graph2 <- densityplot(…)
plot(graph1, position = c(0, .3, 1, 1))
plot(graph2, position = c(0, 0, 1, .3), newpage = FALSE)

  


split的方法,將第一幅圖放置到第二幅圖的上面:第一個plot()函數把頁面分割為一列兩行的矩陣,並將圖形放置到第一列第一行中;第二個plot()函數將圖形放置到第一列第二行中,由於plot()函數默認啟動新的頁面,因此使用newpage = FALSE選項。position方法,設定坐標,原點位於頁面左下角,x軸和y軸維度范圍為(0, 1),position = (xmin, ymin, xmax, ymax)。 

 

 

ggplot2包:

只介紹一種較為簡單的繪圖方式:qplot()函數

qplot(x, y, data = , color = , shape = , size = , alpha = , geom = , method = , fomula = , facets = , xlim = , ylim = , xlab = , ylab = , main = , sub = )

選項

描述

alpha

元素重疊的alpha透明度,數值為0(完全透明)到1(完全不透明)間的分數

color/shape/size/fill

把變量的水平與符號顏色、形狀或大小聯系起來,color為線的顏色,fill為填充顏色

data

指定一個數據框

facets

指定條件變量,創建一個柵欄圖

geom

設定定義圖形類型的幾何形狀

main/sub

字符向量,設定標題或副標題

method/formula

若geom = “smooth”,則會默認添加一條平滑擬合曲線和置信區間,觀測數大於1000時,需要調用更高效的平滑擬合算法,包括回歸lm、廣義可加模型gam、穩健回歸rlm。formula指定擬合形式,注意formula = y ~ x使用的就是字母y和x而不是變量名。

對於method = “gam”要加載mgcv包,method = “rml”要加載MASS包

x/y

指定擺放在水平軸和豎直軸的變量。對於單變量圖形(如直方圖),則省略y

xlab/ylab

字符向量,設定橫軸和縱軸標簽

xlim/ylim

二元素數值型向量,分別指定橫軸和縱軸的最小值和最大值

 

交互式圖形:

主要介紹的軟件包:playwith, latticist, iplots, rggobi

 

基礎安裝中的交互:鑒別點函數:identify()函數

plot(mtcars$wt, mtcars$mpg)
identify(mtcars$wt, mtcars$mpg, labels = row.names(mtcars))

  


許多包中的圖形函數都可以應用該方法進行標注,但是lattice或ggplot2圖形無法使用該方法。 

 

playwith包:

playwith()包允許用戶識別和標注點、查看一個觀測所有的變量值、縮放和旋轉圖形、添加標注(文本、箭頭、線條、矩形、標題和標簽)、修改視覺元素(顏色、文本大小等)、應用先前存儲的圖形風格,以及以多種格式輸出圖形結果。

playwith()既對R基礎圖形有效,也對lattice和ggplot2圖形有效,但是並不是所有都可以用。

 

latticist包:

www.deducer.org

可以與playwith整合到一起:

library(latticist)
mtcars$cyl <- factor(mtcars$cyl)
mtcars$gear <- factor(mtcars$gear)
latticist(mtcars, use.playwith = TRUE)

  


 作用是可以通過柵欄圖方式探索數據集。

iplots包:

http://rosuda.org/iplots/

playwith包和latticist包只能與單幅圖形交互,而iplots包提供的交互方式則有所不同。該包提供了交互式馬賽克圖、柱狀圖、箱線圖、平行坐標圖、散點圖和直方圖,以及顏色刷,並可將他們結合在一起繪制。也就是說可通過鼠標對觀測點進行選擇和識別,並且對其中一幅圖形的觀測點突出顯示時,其他被打開的圖形將會自動突出顯示相同的觀測點。

ibar()

交互式柱狀圖

ibox()

交互式箱線圖

ihist()

交互式直方圖

imap()

交互式地圖

imosaic()

交互式馬賽克圖

ipcp()

交互式平行坐標圖

iplot()

交互式散點圖

 

 

roggobi包:

開源軟件GGobi(www.ggobi.org)

用法:首先要下載該軟件,然后在R中安裝rggobi包,即可利用R中運行GGobi

 


免責聲明!

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



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