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

來源:互聯網
上載者:User

標籤:

第十一章中級繪圖

本章內容:

二元變數和多元變數關係的可視化

繪製散佈圖和折線圖

理解相關圖

學習馬賽克圖和關聯圖

本章用到的函數有:

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)


求關注 求擴散親朋好友

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.