R教程翻译:散点图,Scatterplots
在 R 中可使用 多种 方式来创建散点图。最基本的方式就是使用 plot( x , y ) 函数,其中, x 和 y 都是由数值组成的向量,表示要绘制到图像中去的那些(x,y)点。
# 简单散点图
attach(mtcars)
plot(wt, mpg, main= "Scatterplot Example",
xlab= "Car Weight ", ylab= "Miles Per Gallon ", pch= 19)
# 加入拟合线
abline(lm(mpg~wt), col= "red") # 回归线 (y~x)
lines(lowess(wt,mpg), col= "blue") # 本地加权散点平滑(lowess)线 (x,y)
car 软件包中的 scatterplot( ) 函数提供了狠多增强功能,包括:线条拟合、带边距的盒状绘图、按照某个因子的条件绘图、以及交互式坐标点识别。这些功能都是可选的。
# 加强式的散点图,按照汽车的汽缸数量将每加仑汽油能行驶的英里数(MPG)与重量进行对比
library(car)
scatterplot(mpg ~ wt | cyl, data=mtcars,
xlab= "Weight of Car", ylab= "Miles Per Gallon",
main= "Enhanced Scatter Plot",
labels= row.names(mtcars))
最少有4个函数可用于创建散点图矩阵。数据分析师一定会狠喜欢散点图矩阵!
# 基本的散点图矩阵
pairs(~mpg+disp+drat+wt,data=mtcars,
main= "Simple Scatterplot Matrix")
lattice 软件包,提供了一些选项,可基于某个因子来按条件绘制散点图矩阵:
# 使用lattice 软件包绘制的散点图矩阵
library(lattice)
splom(mtcars[c(1,3,5,6)], groups=cyl, data=mtcars,
panel=panel.superpose,
key= list(title= "Three Cylinder Options",
columns= 3,
points= list(pch=super.sym$pch[1 : 3],
col=super.sym$col[1 : 3]),
text= list(c("4 Cylinder","6 Cylinder","8 Cylinder"))))
car 软件包,可以基于某个因子来条件性地绘制散点图矩阵,还可以可选地包含:本地加权散点平滑和线性最佳拟合线,还有盒状图、密度,或者在对角线上加上直方图,还可以在单元格的边距处加上某些图。
# 使用car 软件包绘制的散点图矩阵
library(car)
scatterplot.matrix(~mpg+disp+drat+wt|cyl, data=mtcars,
main= "Three Cylinder Options")
gclus 软件包,提供了一些选项,可用于重排那些变量,使得,那些拥有较高相关性的变量会更靠近对角线。它还可以对单元格进行着色,以反映相关性的大小。
# 使用glus 软件包绘制的散点图矩阵
library(gclus)
dta <- mtcars[c(1,3,5,6)] # get data
dta.r <- abs(cor(dta)) # get correlations
dta.col <- dmat.color(dta.r) # get colors
# reorder variables so those with highest correlation
# are closest to the diagonal
dta.o <- order.single(dta.r)
cpairs(dta, dta.o, panel.colors=dta.col, gap= .5,
main= "Variables Ordered and Colored by Correlation" )
如果有了太多的数据点,并且有明显的重叠的话,散点图的用处就降低了。当发生这种事的时候,可以有多种处理方式。 hexbin 软件包中的 hexbin(x, y) 函数,提供了二元变量的容器,将数据收纳到六角形的单元格中(它看起来比它的名字更好看)。
# 带有容器的高密度散点图
library(hexbin)
x <- rnorm(1000)
y <- rnorm(1000)
bin<- hexbin(x, y, xbins= 50)
plot(bin, main= "Hexagonal Binning")
对于有显著的数据点重叠的散点图,另一种处理方式是 sunflowerplot 。参考 help(sunflowerplot) 以了解更多细节。
最后,妳可以将散点图保存为 PDF ,还可以使用半透明的颜色,以让那些重叠的数据点能够显示出来(这个创意来自于B.S. Everrit的 HSAUR )。
# 有半透明效果的高密度散点图
pdf("c:/scatterplot.pdf")
x <- rnorm(1000)
y <- rnorm(1000)
plot(x,y, main= "PDF Scatterplot Example", col= rgb(0,100,0,50,maxColorValue= 255), pch= 16)
dev.off()
注意 : 妳可以使用 col2rgb( ) 函数来获取到 R 颜色的对应的 rbg 值。例如, col2rgb(" darkgreen ") 会得到r=0, g=100, b=0。然后,将透明级别的值作为第4个数字添加到颜色向量中。值为0则表示完全透明。参考 help(rgb) 以了解更多信息。
妳可使用 scatterplot3d 软件包来创建3维的散点图。使用 scatterplot3d( x , y , z ) 函数即可。
# 3维散点图
library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt,disp,mpg, main= "3D Scatterplot")
# 带有颜色和竖直垂线的3维散点图
library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt,disp,mpg, pch= 16, highlight.3d= TRUE,
type= "h", main= "3D Scatterplot")
# 带有颜色、竖直垂线和回归平面的3维散点图
library(scatterplot3d)
attach(mtcars)
s3d <- scatterplot3d(wt,disp,mpg, pch= 16, highlight.3d= TRUE,
type= "h", main= "3D Scatterplot")
fit <- lm(mpg ~ wt+disp)
s3d$ plane3d(fit)
妳还可以使用 rgl 软件包中的 plot3D( x , y , z ) 函数来创建一个交互式的3维散点图。它会创建一个自动旋转的3维散点图,可使用鼠标来手动旋转。前3个参数分别是 x 、 y 和 z 数值向量,表示着要绘制的点集。 col= 和 size= 分别控制着点的颜色和尺寸。
# 自转的3维散点图
library(rgl)
plot3d(wt, disp, mpg, col= "red", size= 3)
妳可以使用 Rcmdr 软件包中的 scatter3d( x , y , z ) 函数来实现类似的效果。
# 另一个旋转的3维散点图
library(Rcmdr)
attach(mtcars)
scatter3d(wt, disp, mpg)
HxLauncher: Launch Android applications by voice commands