R in action讀書筆記(14)第十一章 中級繪圖 之一:散點圖(高能預警)


第十一章中級繪圖

本章內容:

二元變量和多元變量關系的可視化

繪制散點圖和折線圖

理解相關圖

學習馬賽克圖和關聯圖

本章用到的函數有:

plot

hexbin

ablines

iplot

scatterplot

scatterplot3d

pairs

plot3d

scatterplotMatrix

scatter3d

cpairs

symbols

smoothScatter

 

 

11.1散點圖

添加了最佳擬合曲線的散點圖

> attach(mtcars)
> plot(wt,mpg,main="Basic Scatter plot of MPGvs.weight",xlab="car weight (lbs/1000",ylab="miles pergallon",pch=19)
>abline(lm(mpg~wt),col="red",lwd=2,lty=1)#添加最佳擬合的線性直線
>lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)#添加一條平滑曲線

  

car包中的scatterplot()函數增強了散點圖的許多功能,它可以很方便地繪制散點圖,並

能添加擬合曲線、邊界箱線圖和置信橢圓,還可以按子集繪圖和交互式地識別點。

> library(car)
> scatterplot(mpg~wt|cyl,data=mtcars,lwd=2,
+ main="scatter plot of pmg \n vs. weight by #cylinders",
+ xlab="car weight (lbs/1000)",
+ ylab="miles per gallon",
+ legend.plot=TRUE,#左上邊界添加圖例
+ id.method="identify",
+ labels=row.names(mtcars),#可通過點的行名稱來識別點
+ boxplots="xy")

 

11.1.1 散點圖矩陣

pairs()函數可以創建基礎的散點圖矩陣。

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

主對角線的上方和下方的六幅散點圖是相同的,選項upper.panel =NULL將只生成下三角的圖形。

car包中的scatterplotMatrix()函數也可以生成散點圖矩陣,並有以下可選操作:

以某個因子為條件繪制散點圖矩陣;

包含線性和平滑擬合曲線;

在主對角線放置箱線圖、密度圖或者直方圖;

在各單元格的邊界添加軸須圖。

> library(car)
> scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=FALSE,
+ lty.smooth=2,main="scatter plot matrix via car package")

  

線性和平滑(loess)擬合曲線被默認添加,主對角線處添加了核密度曲線和軸須圖。spread = FALSE選項表示不添加展示分散度和對稱信息的直線,lty.smooth =2設定平滑(loess)擬合曲線使用虛線而不是實線。

scatterplotMatrix()函數的另一個用法

> library(car)#主對角線的核密度曲線改成了直方圖,並且直方圖是以各車的氣缸數為條件繪制的。
> scatterplotMatrix(~mpg+disp+drat+wt|cyl,data=mtcars,spread=FALSE,
+ diagonal="histogram",main="scatter plot matrix via carpackage")

  

 

主對角線的核密度曲線改成了直方圖,並且直方圖是以各車的氣缸數為條件繪制的。圖形包含主對角線中的直方圖以及其他部分的線性和平滑擬合曲線。另外,子群(根據氣缸數)通過符號類型和顏色來區分標注默認地,回歸直線擬合整個樣本,包含選項by.groups = TRUE將可依據各子集分別生成擬合曲線。

gclus包中的cpairs()函數提供了一個有趣的散點圖矩陣變種。它含有可以重排矩陣中變量位置的選項,可以讓相關性更高的變量更靠近主對角線。該函數還能對各單元格進行顏色編碼來展示變量間的相關性大小。首先考察相關性:

>cor(mtcars[c("mpg","wt","disp","drat")])

mpg wt disp drat

mpg 1.0000000 -0.8676594-0.8475514 0.6811719

wt -0.8676594 1.0000000 0.8879799 -0.7124406

disp -0.8475514 0.8879799 1.0000000 -0.7102139

drat 0.6811719 -0.7124406-0.7102139 1.0000000

gclus包生成的散點圖矩陣

> 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,main="variablesordered and colored by correlation")

散點圖矩陣將根據新的變量順序(myorder)和顏色列表(mycolors)繪圖、上色,gap選項

使矩陣各單元格間的間距稍微增大一點。相關性最高的變量對是車重與排量,以及每加侖英里數與車重(標了紅色,並且離主對角線最近)

11.1.2 高密度散點圖

當數據點重疊很嚴重時,用散點圖來觀察變量關系就顯得“力不從心”了。

> set.seed(1234)
> n<-10000
> c1<-matrix(rnorm(n,mean=0,sd=.5),ncol=2)
> c2<-matrix(rnorm(n,mean=3,sd=2),ncol=2)
> mydata<-rbind(c1,c2)
> mydata<-as.data.frame(mydata)
> names(mydata)<-c("x","y")
> with(mydata,plot(x,y,pch=19,main="scatter plot with 10000 observations"))

smoothScatter()函數可利用核密度估計生成用顏色密度來表示點分布的散點圖,利用光平滑密度估計繪制的散點圖。此處密度易讀性更強:

> with(mydata, smoothScatter(x,y,main="scatter plot with 10000observations"))

hexbin包中的hexbin()函數將二元變量的封箱放到六邊形單元格中(圖形比名稱更直觀)

> library(hexbin)
> with(mydata,{bin<-hexbin(x,y,xbins=50)plot(bin,main="hexagonalbinning with \n 10000 boservations")})

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

數目)

> library(IDPmisc)
> with(mydata,{ iplot(x,y,main="imagescatter plot with\n color indicating density") })

11.1.3 三維散點圖

假使你對汽車英里數、車重和排量間的關系感興趣,可用scatterplot3d中的

scatterplot3d()函數來繪制它們的關系。Scatterplot3d(x,y,z) x被繪制在水平軸上,y被繪制在豎直軸上,z被繪制在透視軸上。

> library(scatterplot3d)
> attach(mtcars)
> scatterplot3d(wt,disp,mpg,main="basic 3d scatter plot")

注:如出現Error in plot.new() : figure margins too large 重啟Rstudio即可

satterplot3d()函數提供了許多選項,包括設置圖形符號、軸、顏色、線條、網格線、突

出顯示和角度等功能

> scatterplot3d(wt,disp,mpg, pch=16,highlight.3d=TRUE,type="h",main="3dscatter plot with vertical lines")

添加一個回歸面

> s3d<-scatterplot3d(wt,disp,mpg,pch=16, highlight.3d=TRUE, type="h", main="3dscatter plot with vertical lines")
> fit<-lm(mpg~wt+disp)
> s3d$plane3d(fit)

旋轉三維散點圖

用rgl包中的plot3d()函數創建可交互的三維散點圖。你能通過鼠標對圖形進

行旋轉。函數格式為:plot3d(x,y,z)

其中xyz是數值型向量,代表着各個點。你還可以添加如col和size這類的選項來分別控制

點的顏色和大小。

> library(rgl)
> attach(mtcars)
> plot3d(wt,disp,mpg,col="red",size=5)

 

也可以使用Rcmdr包中類似的函數scatter3d():

> library(Rcmdr)
> attach(mtcars)
> scatter3d(wt,disp,mpg)

 

scatter3d()函數可包含各種回歸曲面,比如線性、二次、平滑和附加等類型。圖形默認添

加線性平面。另外,函數中還有可用於交互式識別點的選項。

11.1.4 氣泡圖

三維散點圖來展示三個定量變量間的關系。現在介紹另外一種思路:先創建一個二維散點圖,然后用點的大小來代表第三個變量的值。這便是氣泡圖(bubble plot)。

你可用symbols()函數來創建氣泡圖。該函數可以在指定的(x, y)坐標上繪制圓圈圖、方形

圖、星形圖、溫度計圖和箱線圖。以繪制圓圈圖為例:

Symbols(x,y,circle=radius)

其中xyradius是需要設定的向量,分別表示xy坐標和圓圈半徑。

用面積而不是半徑來表示第三個變量,那么按照圓圈半徑的公式(r = A / π )變

換即可:Symbols(x,y,circle=sqrt(z/pi))z即第三個要繪制的變量。

> attach(mtcars)
> r<-sqrt(disp/pi)
> symbols(wt,mpg,circle=r,inches=.3,#比例因子,控制着圓圈大小(默認最大圓圈為1英寸)
+ fg="white",bg="lightblue", main="bubble plotwith point size\n proportional to displacement", ylab="miles pergallon", xlab="weight of car(lbs/1000")
> text(wt,mpg,rownames(mtcars),cex=.6)#可選函數,此處用來添加各個汽車的名稱
> detach(mtcars)


求關注 求擴散親朋好友


免責聲明!

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



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