標籤:
第十一章中級繪圖
本章內容:
二元變數和多元變數關係的可視化
繪製散佈圖和折線圖
理解相關圖
學習馬賽克圖和關聯圖
本章用到的函數有:
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)
其中x、y和z是數值型向量,代表著各個點。你還可以添加如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)
其中x、y和radius是需要設定的向量,分別表示x、y座標和圓圈半徑。
用面積而不是半徑來表示第三個變數,那麼按照圓圈半徑的公式(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)第十一章 中級繪圖 之一:散佈圖(高能預警)