4

不同版本的散点图矩阵

 3 years ago
source link: https://cosx.org/2009/03/scatterplot-matrix-visualization/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

散点图矩阵是散点图的高维扩展,它从一定程度上克服了在平面上展示高维数据的困难,在展示多维数据的两两关系时有着不可替代的作用。R 软件就包含了各种不同版本的散点图函数,本文主要介绍散点图矩阵的设计及其在 R 中的实现方法,并比较它们的长短,从而审时度势,选取自己喜欢的表现方式和相应的函数。

他山之石,可以攻玉。除了辅之以不同的颜色、符号外,散点图中还可以添加其他图形元素,以增强表达力,最常见的添加剂有坐标轴须、直方图、箱线图、平滑曲线、拟合曲线等。

常见的画散点图矩阵的函数有:

pairs(graphics)

R 中,graphics 包中的 pairs() 是画散点图矩阵的长老级函数,它不仅可以绘制最朴素的散点图矩阵,同时也可以通过进一步设置绘图参数进行配置(参见? pairs),达到更高的要求(添加其他图形元素等)。不过进一步设置较为麻烦,幸好后面要介绍的函数已经可以满足我们常见的额外要求。

以鸢尾花数据为例,用以下代码绘制其散点图(图 1),不同颜色分别代表不同品种的鸢尾花。

pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",
      pch = 21,
      bg = c("red", "green3", "blue")[unclass(iris$Species)])

pairs

图 1 pairs

实际上,图 1 已经可以给我们很多信息,包括各类鸢尾花的花瓣、花萼长宽的大体分布以及它们两两之间的关系。

scatterplot.matrix(car)

car 包中的 scatterplot.matrix() 函数(可以简写为 spm())可以直接指定散点图中主对角线上的绘图元素(密度图、箱线图、直方图、QQ 图等),还可以在散点图中添加拟合曲线、平滑曲线、相关读椭圆等。

同样利用鸢尾花数据,下面代码画出其散点图矩阵(图 2).

library(car)
spm(~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width |
    Species, data = iris)

spm

图 2 spm

gpairs(YaleToolkit)

YaleToolKit 包中的 gpairs() 函数同样可以绘制散点图矩阵,较之 spm() 函数,它更为复杂一些。下面代码得到图 3,更多的例子参见帮助文档。

library(YaleToolkit)
gpairs(iris, upper.pars = list(scatter = 'stats'),
         scatter.pars = list(pch = 1:3,
                             col = as.numeric(iris$Species)),
         stat.pars = list(verbose = FALSE))

gpairs

图 3 gpairs

splom(lattice)

lattice 包是基于网格系统的,是 S-PLUS 里的 Trellis 图形在 R 中的实现。Trellis 是多元数据可视化的方法,特别适用于发现各变量之间的相互作用关系。Lattice(Trellis)的主要想法是不同条件下的多个图:根据某变量的值的不同对两个变量作不同图。

lattice 包中的 splom() 函数可以按类别绘制散点图矩阵,也可以通过进一步的设置达到更高的要求。下面的代码再次得到鸢尾花数据的散点图矩阵(图 4)。

library(lattice)
super.sym <- trellis.par.get("superpose.symbol")
splom(~iris[1:4], groups = Species, data = iris,
      panel = panel.superpose,
      key = list(title = "Three Varieties of Iris",
                 columns = 3,
                 points = list(pch = super.sym$pch[1:3],
                 col = super.sym$col[1:3]),
                 text = list(c("Setosa", "Versicolor", "Virginica"))))

splom

图 4 splom

曾经有人问我认为什么统计方法最好,我不假思索地回答,‘散点图’ 呗!当然,这里面也有开玩笑的成份,但意思也是想表达统计方法的应用,应该能让人家容易理解你的意图。

散点图直观明了,是一类重要的可视化方法。以上文字仅仅简要介绍了四个绘制散点图矩阵的函数,很是粗糙,具体的细节还需要进一步阅读帮助文档。

本文的首要目的是提醒大家可以让散点图矩阵如虎添翼,主要是与其他图形(触须图、直方图、箱线图、平滑线、拟合线等)的适当搭配;第二目的是希望大家通过上面的介绍,可以选择自己需要的绘图函数,从而省去一些不必要的探索时间。

魏太云,毕业于中国人民大学统计学院,感兴趣的领域是统计建模、机器学习、数据可视化。此外,魏太云还曾担任统计之都理事会主席(2011-2016),参与多届中国 R 语言会议的组织工作,合作翻译出版了《ggplot2:数据分析与图形艺术》、《R 数据可视化手册》等书籍。魏太云

敬告各位友媒,如需转载,请与统计之都小编联系(直接留言或发至邮箱:[email protected]),获准转载的请在显著位置注明作者和出处(转载自:统计之都),并在文章结尾处附上统计之都微信二维码。

统计之都微信二维码

← 在 Batch Mode 下完成无人值守的 R 项目测试 中国人民大学统计学院《主文献研读》博士生课程(2009 年春) →

发表 / 查看评论


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK