星期五, 十二月 02, 2011

聊聊散点图

散点图很简单,但它无疑是探索数值数据之间关系的有力工具。它有直观简便的优点,通过观察散点图,不但可以得到定性的结论,而且可以通过观察并处理异常数据,提高用于估算相关程度的准确性。在R中实现散点图最简单的函数就是plot,我们首先随机生成两个数据,然后用作散点图
y=rnorm(100)
x=rnorm(100)
plot(x,y)
如果希望从简单的散点图中得到更多信息,我们可以使用car包中的scatterplot函数,散点图增加了单变量的箱线图,线性回归线和局部回归线。此外该函数也可以进行条件绘图。
scatterplot(x,y,spread=F)


如果数据过多,例如10000个随机生成的数据来作散点图,你会发现由于数据过于密集,只产生一坨黑色的东东。
a=rnorm(10000)
b=rnorm(10000)
plot(a,b)

这时需要改用smoothScatter函数,它会利用密度估计来生成平滑的图形来表示散点图的密集程度,看起来有点意思吧。
smoothScatter(a,b)

如果你掌握了ggplot2扩展包,散点图就更容易了,在处理大量数据时可以利用alpha透明度设置或jitter参数来降低数据的重叠,还可以直接进行LOESS平滑。下面的图形就是mpg数据集的例子,分别对四种不同的汽缸的汽车绘制散点图并拟合。
library(ggplot2)
p=ggplot(mpg,aes(displ,hwy))
p+geom_point(aes(colour=factor(cyl)),size=3)+geom_smooth(alpha=0.3,aes(fill=factor(cyl)))



上述所谈的都是两个变量之间的散点图,如果涉及到多个变量,可能就需要用到散点矩阵图了,当然你可以用最基本的pairs函数生成,但笔者偏爱的是car包中的scatterplotMatrix函数,不仅有局部回归拟合,还有直方图信息。
z=rnorm(100)
scatterplotMatrix(~x+y+z,spread=F,diagonal="histogram")

除此之外,如果还需要绘制三维散点图,可以使用scatterplot3d函数,你可以参看这个博文。气泡图的话则可以使用symbols函数。

没有评论:

发表评论