1 散点图

散点图可用来描述两个连续型变量间的关系。R中创建散点图的基础函数是plot(x, y),其中,x和y是数值型向量,代表着图形中的(x, y)点。下面展示了一个例子。

attach(mtcars)

plot(wt, mpg, main="Basic Scatter plot of MPG vs. Weight", xlab="Car Weight (lbs/1000)",

     ylab="Miles Per Gallon ", pch=19)

abline(lm(mpg~wt), col="red", lwd=2, lty=1)

lines(lowess(wt,mpg), col="blue", lwd=2, lty=2)

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_实线

结果分析:使用的是mtcars数据框,创建了一幅基本的散点图,wt和mpg之间的关系是用实心圆圈来表示的,abline()函数用来添加最佳拟合的线性直线,如图中红色实线所示,lowess()函数则用来添加一条平滑曲线,如图中蓝色虚线所示。结果表示,随着车重的增加,每加仑英里数减少。

1.1  散点图矩阵

R中有很多创建散点图矩阵的实用函数。pairs()函数可以创建基础的散点图矩阵,下面的代码生成了一个散点图矩阵,包含mpg、disp、drat和wt四个变量:

pairs(~mpg+disp+drat+wt, data=mtcars, main="Basic Scatter Plot Matrix")

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_实线_02

结果分析:看到所有指定变量间的二元关系,主对角线的上方和下方的六幅散点图是相同的,可以发现是关于主对角线对称。

通过调整参数,可以只展示下三角或者上三角的图形。例如,选项upper.panel = NULL将只生成下三角的图形。

pairs(~mpg+disp+drat+wt, data=mtcars, main="Basic Scatter Plot Matrix",upper.panel = NULL)

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_3d_03

car包中的scatterplotMatrix()函数也可以生成散点图矩阵:

library(car)

scatterplotMatrix(~ mpg + disp + drat + wt, data=mtcars, spread=FALSE, smoother.args=list(lty=2),

                  main="Scatter Plot Matrix via car Package")

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_3d_04

结果分析:可以看到线性和平滑(loess)拟合曲线被默认添加,主对角线处添加了核密度曲线和轴须图。spread = FALSE选项表示不添加展示分散度和对称信息的直线,smoother.args=list(lty=2)设定平滑(loess)拟合曲线使用虚线而不是实线。

1.2 高密度散点图

当数据点重叠很严重时,用散点图来观察变量关系非常不明显,下面构造10 000个观测点,显示它们分布在两个重叠的数据群中的情况:

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 10,000 Observations"))

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_拟合_05

10 000个观测点的散点图,严重的重叠导致很难识别哪里数据点的密度最大,数据点的重叠导致识别x与y间的关系变得异常困难,R提供了一些解决办法。你可以使用封箱、颜色和透明度来指明图中任意点上重叠点的数目。smoothScatter()函数可利用核密度估计生成用颜色密度来表示点分布的散点图:

with(mydata, smoothScatter(x, y, main="Scatter Plot Colored by Smoothed Densities"))

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_实线_06

结果分析:途中蓝色点最大的一块区域表示x与y之间的密度最大。

hexbin包中的hexbin()函数将二元变量的封箱放到六边形单元格中(图形比名称更直观)。示例如下:

install.packages("hexbin")

library(hexbin)

with(mydata, { bin <- hexbin(x, y, xbins=50)

  plot(bin, main="Hexagonal Binning with 10,000 Observations") })

x, y:向量,给出要分层的二元数据点的坐标。

xbins:划分xbnds范围的bins数量。

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_数据_07

结果分析:用六边形封箱图展示的各点上覆盖观测点数目的散点图,通过图例,数据的集中度很容易计算和观察。

1.3 三维散点图

散点图和散点图矩阵展示的都是二元变量关系,那么我们想一次对三个定量变量的交互关系进行可视化呢?本节例子中,你可以使用三维散点图。

例如,假使你对汽车英里数、车重和排量间的关系感兴趣,可用scatterplot3d包中的

scatterplot3d()函数来绘制它们的关系。格式如下:

scatterplot3d(x, y, z)

x被绘制在水平轴上,y被绘制在竖直轴上,z被绘制在透视轴上。

library(scatterplot3d)

attach(mtcars)

scatterplot3d(wt, disp, mpg, main="Basic 3D Scatter Plot")

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_实线_08

结果分析:该三维图显示了每加仑英里数mpg、车重wt和排量disp的三维散点图

satterplot3d()函数提供了许多选项,包括设置图形符号、轴、颜色、线条、网格线、突出显示和角度等功能。例如代码:

library(scatterplot3d)

attach(mtcars)

scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE, type="h",

              main="3D Scatter Plot with Vertical Lines")

type:表示绘图类型的字符:"p "表示点,"l "表示线,"h "表示垂直于x-y平面的线

中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_3d_09 

我们还可以在刚才那幅图上添加一个回归面,代码如下:

library(scatterplot3d)

attach(mtcars)

s3d <-scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE, type="h",

                    main="3D Scatter Plot with Vertical Lines and Regression Plane")

fit <- lm(mpg ~ wt+disp)

s3d$plane3d(fit)

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_数据_10

结果分析:平面代表预测值,图中的点是实际值。平面到点的垂直距离表示残差值。若点在平面之上则表明它的预测值被低估了,而点在平面之下则表明它的预测值被高估了。

1.4 旋转三维散点图

如果你能对三维散点图进行交互式操作,那么图形将会更好解释。R提供了一些旋转图形的

功能,让你可以从多个角度观测绘制的数据点。

例如,你可用rgl包中的plot3d()函数创建可交互的三维散点图。你能通过鼠标对图形进行旋转。函数格式为:

plot3d(x, y, z)

其中x、y和z是数值型向量,代表着各个点,还可以添加如col和size这类的选项来分别控制点的颜色和大小,下面是一个例子:

install.packages("rgl")

library(rgl)

attach(mtcars)

plot3d(wt, disp, mpg, col="red", size=5)

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_拟合_11

也可以使用car包中类似的函数scatter3d():

library(car)

with(mtcars, scatter3d(wt, disp, mpg))

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_数据_12

 

 

 中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_数据_13

 

1.5气泡图

我们通过三维散点图来展示三个定量变量间的关系。现在介绍另外一种思路:先创建一个二维散点图,然后用点的大小来代表第三个变量的值。这便是气泡图(bubble plot)。

symbols()函数来创建气泡图。该函数可以在指定的(x, y)坐标上绘制圆圈图、方形图、星形图、温度计图和箱线图。以绘制圆圈图为例:

symbols(x, y, circle=radius)

其中x、y和radius是需要设定的向量,分别表示x、y坐标和圆圈半径,z即第三个要绘制的变量。

x轴代表车重wt,y轴代表每加仑英里数mpg,气泡大小代表发动机排量disp。代码如下:

attach(mtcars)

r <- sqrt(disp/pi)

symbols(wt, mpg, circle=r, inches=0.30,

        fg="white", bg="lightblue",

        main="Bubble Plot with point size proportional to displacement",

        ylab="Miles Per Gallon",

        xlab="Weight of Car (lbs/1000)")

text(wt, mpg, rownames(mtcars), cex=0.6)

detach(mtcars)

 

中级绘图--散点图(散点图矩阵、高密度散点图、(旋转)三维散点图、气泡图)_3d_14

结果分析:选项inches是比例因子,控制着圆圈大小(默认最大圆圈为1英寸)。text()函数是可选函数,此处用来添加各个汽车的名称。从图中可以看到,随着每加仑汽油所行驶里程的增加,车重和发动机排量都逐渐减少。


作者:zhang-X​,转载请注明原文链接​