不同版本的散点图矩阵

原文:http://cos.name/2009/03/scatterplot-matrix-visualization/


散点图矩阵是散点图的高维扩展,它从一定程度上克服了在平面上展示高维数据的困难,在展示多维数据的两两关系时有着不可替代的作用。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

讨论

益辉曰:

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

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

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

要使用 ECharts 创建散点图矩阵(Scatter Plot Matrix),可以通过 `echarts` 提供的 `grid` 和 `dataset` 功能来实现。散点图矩阵通常用于展示多维数据之间的两两关系,适用于数据分析、统计可视化等领域。 ### 散点图矩阵的基本结构 ECharts 中并没有内置的散点图矩阵组件,但可以通过多个子图表组合的方式来实现这一功能。主要步骤包括: 1. **准备数据**:将多维数据整理为适合 `dataset.source` 的格式。 2. **配置多个坐标系**:通过 `grid` 配置多个独立的绘图区域。 3. **循环创建散点图**:根据维度组合,在不同的 `grid` 中绘制对应的散点图。 ### 示例代码 以下是一个简单的示例代码,展示如何在 ECharts 中构建一个 3x3 的散点图矩阵: ```javascript option = { dataset: { source: [ ['a', 'b', 'c'], [10, 20, 30], [15, 25, 35], [20, 30, 40], [25, 35, 45] ] }, grids: { top: 60, bottom: 60, left: 60, right: 60, containLabel: true }, xAxis: { type: 'value', gridIndex: 0 }, yAxis: { type: 'value', gridIndex: 0 }, series: [{ type: 'scatter', symbolSize: (val) => Math.sqrt(val[2]) * 2, data: [], animationDelay: function(idx) { return idx * 10; } }] }; ``` 上述代码仅展示了单个散点图的配置,实际构建散点图矩阵时需要对每个维度组合进行类似配置,并动态生成多个 `series` 和 `xAxis/yAxis` 设置。 ### 复杂场景实现 对于更复杂的散点图矩阵,可以考虑以下优化手段: - 使用脚本自动生成多个 `grid` 和 `series` 配置项。 - 利用 `dataset.dimensions` 来获取所有维度名称,自动遍历生成所有可能的二维散点图。 - 通过 `visualMap` 或 `color` 映射增强数据可视化效果。 ### 注意事项 - 数据量较大时,建议开启 `progressive: 0` 来关闭渐进渲染,以避免性能问题。 - 如果数据维度较多,需合理设置 `grid` 的布局,防止图表过于密集影响可读性。 - 可结合 `tooltip` 实现交互式的数据提示功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值