调和曲线图用于聚类判断, 比较方便

多元数据的可视化方法很多,譬如散点图、星图、雷达图、脸谱图、协同图等,大致可分为以下几类:1.基于点(如二维、三维散点图);2.基于线(如轮廓图、调和曲线图);3.基于平面图形(如星图、雷达图、蛛网图);4.基于三维曲面(如三维曲面图)。其思想是将高维数据映射到低维空间(三维以下)内,尽量使信息损失最少,同时又能利于肉眼辨识。调和曲线图和轮廓图(即平行坐标图)都是多元数据的可视化方法,它们基于“线”的形式,将多元数据表示出来,对于聚类分析有很好的帮助。

轮廓图

轮廓图的思想非常简单、直观,它是在横坐标上取 p 个点,依次表示各个指标(即变量);横坐标上则对应各个指标的值(或者经过标准化变换后的值),然后将每一组数据对应的点依次连接即可。

lattice 包中的 parallel() 函数可以轻松绘出轮廓图。利用 iris 数据,以下代码可以画出其轮廓图(图1)。

library(lattice)
data(iris)
parallel(~iris[1:4], iris, groups = Species,horizontal.axis = FALSE, scales = list(x = list(rot = 90)))

图1 Iris 数据的轮廓图(Parallel Coordinate Plots)

观察图1,可以发现同一品种的鸢尾花的轮廓图粗略地聚集在一起。

调和曲线图

调和曲线图的思想和傅立叶变换十分相似,是根据三角变换方法将 p 维空间的点映射到二维平面上的曲线上。假设Xr是 p 维数据的第 r 个观测值,即

XTr=(xr1,⋯,xrp)

则对应的调和曲线是

fr(t)=xr1sqrt2+xr2sint+xr3cost+xr4sin2t+xr5cos2t+⋯

其中−π≤t≤π.

同样利用 iris 数据,下面代码(主要取自《统计建模与R软件》,尚未优化)可以画出其调和曲线图(图2)。

x = as.matrix(iris[1:4])
t = seq(-pi, pi, pi/30)
m = nrow(x)
n = ncol(x)
f = matrix(0, m, length(t))
for (i in 1:m) {f[i, ] = x[i, 1]/sqrt(2)for (j in 2:n) {if (j%%2 == 0)f[i, ] = f[i, ] + x[i, j] * sin(j/2 * t)else f[i, ] = f[i, ] + x[i, j] * cos(j%/%2 * t)}
}
plot(c(-pi, pi), c(min(f), max(f)), type = "n", main = "The Unison graph of Iris",xlab = "t", ylab = "f(t)")
for (i in 1:m) lines(t, f[i, ], col = c("red", "green3","blue")[unclass(iris$Species[i])])
legend(x = -3, y = 15, c("setosa", "versicolor", "virginica"),lty = 1, col = c("red", "green3", "blue"))

图2 Iris 数据的调和曲线图

观察图2,同样可以发现同一品种鸢尾花数据的调和曲线图基本上扭在一起。同图1 比较后,发现图2 更加清楚明白,事实上Andrews证明了调和曲线图有许多良好性质。

讨论

轮廓图和调和曲线图有着相近的功能,而技巧大有不同。轮廓图简单却现得粗糙,调和曲线图公式复杂却十分精细。从这一个侧面可以发现直观的统计思想固然重要,但存在很多种不可能通过直观思想得到的、而又非常精细、美妙的方法,此时倍受众多统计学家责难的数学显得优雅而又强大。

从去年刚学R的时候碰了下调和曲线图之后就再也没碰过了,碰巧今天正好有人问起,索性干脆就几种常见的实现方法简单写一写,不算上自己动手写函数的话大致有那么三种,当然肯定也还有很多更好的办法。
1 MSG包中的andrews_curve()
这是我觉得最不错的方法,函数代码很科学,在我的另一篇文章上也以它作为示例,并且在参数设置上与一般的plot等保持了一致,感觉在作图效果的设置上也很灵活,这是因为函数本身依赖于matplot,参数中除去x和n外其余均可完全参照matplot,x则指的是需提供作图的数据,数据框和矩阵均可,n用于控制取点个数,即曲线的平滑度,n越大平滑程度越高,缺省值是101。
andrews_curve(iris[, -5])
曲线的颜色可以col参数控制,缺省时采用默认的调色板,也可以自己设置一个向量,如果曲线数超过调色板长度或向量的长度则会重复使用,上述代码未经任何设置即采用了 默认的调色板,但事实上效果并不理想,曲线一多就会显得很乱,但仔细观察可以看到曲线大致可以分成那么几类,于是可以“按类”指定颜色
andrews_curve(iris[, -5], col = as.integer(iris[, 5]))
这里借助了数据中的分类变量,将其转化为整数后即可调用调色板中的颜色。
2 andrews包中的andrews()
andrews包是专门为调和曲线服务的,但除了提供了更多的f(t)形式外,实在找不出更多的优点,函数本身也并不灵活。用法如下
andrews(df, type=1, clr=NULL, step=100, ymax=10, main=NULL, sub=NULL)
df指的是data frame,即需要用于作图的数据,但事实上matrix也是可以的,type可以指定f(t)的形式,主要提供了四种形式
1: f(t)=x1/(2^0.5)+x2*sin(t)+x3*cos(t)+x4*sin(2*t)+x5*cos(2*t)+...
2: f(t)=x1*sin(t)+x2*cos(t)+x3*sin(2*t)+x4*cos(2*t)+...
3: f(t)=x1*cos(t)+x2*cos((2*t)^0.5)+x3*cos((3*t)^0.5)+...
4: f(t)=1/(2^0.5)*(x1+x2*(sin(t)+cos(t))+x3*(sin(t)-cos(t))+x4*(sin(2*t)+cos(2*t))+x5*(sin(2*t)-cos(2*t))+...)
clr是与之前介绍的andrews_curve最大的不同点,这里颜色的设置需要依赖于数据集中的某一变量,一般用分类变量,而不能直接在函数参数中设置颜色。例如
andrews(iris,clr=5,ymax=3)
这里就是采用数据集irish中的第五个变量的取值来设置颜色(当然这其实也是分类变量可视化的一种很好的办法),其实也就是类似于之前的
col = as.integer(iris[, 5])
当然如果原始数据中并没有合适的变量可以自行在原始数据中添加一列,但这样就没有充分利用原始数据的信息,略微有点浪费。step的用法与andrews_curve中的参数n基本一致。函数本身并没有提供更多用于美化图形的参数,可以通过par或者一些低级绘图函数来实现,可能并没有那么方便,另外函数源代码中的嵌套式循环也让人觉得非常遗憾。
3 tourr包中的andrews()
这个包里的andrews()是没有画图功能,仅仅只能用来计算,也就是数据的转换,但数据都转换好了,剩下其实也就没啥了。不过比较有意思的是,包中还有一个关于调和曲线的函数提供了一种动画形式的实现(虽然没什么技术含量)
animate_andrews(flea[, 1:6], grand_tour(d = 3))
当然在这不经任何修缮的情况下,效果是比较恶心的,好在有那三个点,所以最终能画成什么样,完全就事在人为啦。
另外包的作者心眼不错,为此还配了一个GUI,也就是tourrGui包,当然范围也不止调和曲线,还有脸谱图、平行坐标图(轮廓图)等等,玩一玩挺不错。

调和曲线图和轮廓图的比较相关推荐

  1. 【多元统计分析与R语言】【详解】使用教材P84页表3-2进行多元数据简单R分析:定量变量的分析(直方图、散点图)、定性变量的分析并绘制绘制均值条图、箱尾图、星相图、调和曲线图

    可视化[教材P84页表3-2] 1.题目 2.题目详解 2.1.多元数据简单R分析:定量变量的分析(直方图.散点图).定性变量的分析(单因素分析.多维列联表).参考教材P45-P52页. 2.2.绘制 ...

  2. 怎么实现CorelDRAW中轮廓图工具的快速运用

    在 CorelDRAW X7中应用轮廓图效果时,可以设置不同的轮廓颜色和填充颜色.应用这些颜色时,会产生轮廓渐变效果,从而使轮廓图颜色更加丰富.轮廓图效果与调和效果相似,通常情况下轮廓图效果只作用于单 ...

  3. CorelDRAW中的轮廓图工具该怎么进行使用

    在 CorelDRAW X7中应用轮廓图效果时,可以设置不同的轮廓颜色和填充颜色.应用这些颜色时,会产生轮廓渐变效果,从而使轮廓图颜色更加丰富.轮廓图效果与调和效果相似,通常情况下轮廓图效果只作用于单 ...

  4. .net之生成图表的控件(柱状图,曲线图,饼状图) [转]

    可以生成柱状图,曲线图,饼状图,只要你给他一个datatable,在这声明一下 using System; using System.Web.UI; using System.Data; using  ...

  5. QT QNetworkInterface::allAddresses();获取了很多无效的地址_Qt编写地图综合应用16-省市轮廓图下载...

    一.前言 之前做获取边界点的时候,主要采用的是在线地图的方式,因为在线地图中直接内置了函数可以根据行政区域的名称来自动获取边界,其实这些边界就是一些点坐标集合连接起来的平滑线,然后形成的轮廓图,这种方 ...

  6. Python密度和轮廓图绘制--Matplotlib详解

    密度和轮廓图 有些情况下,我们需要在二维图表中使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图).Matplotlib 提供了三个有用的函数来处理这项任务: plt.contour绘 ...

  7. 轮廓图(Silhouette)

    轮廓图(Silhouette)是一种用来刻画聚类效果的度量.详细解释见:http://en.wikipedia.org/wiki/Silhouette_(clustering) 定义为:对于一个样本点 ...

  8. matlab画动物轮廓图,MATLAB一维插值的应用实例—画左右手的轮廓图

    问题提出 画你自己的手的形状,在MATLAB中输入 figure('position',get(0,'screensize')) axes('position',[0 0 1 1]) [x,y]=gi ...

  9. python 三维数据绘制等高线_python密度与等高线绘制,Python,和,轮廓图,Matplotlib,详解...

    密度和轮廓图 有些情况下,我们需要在二维图表中使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图).Matplotlib 提供了三个有用的函数来处理这项任务: plt.contour绘 ...

最新文章

  1. Debian下使用OpenLDAP 管理端
  2. java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to...异常
  3. maven 亲测可用国内镜像 阿里云
  4. pythonapi是什么意思_python api是什么
  5. 基于注解的SpringMVC整合JPA
  6. Struts2的工作原理及工作流程
  7. MySQL5.6优化了Order by排序limit
  8. java输出孪生素数对数_最大的孪生素数证明
  9. IDEA中如何给含有main方法的普通类设置JVM参数
  10. 字幕在看着你:利用恶意字幕文件劫持计算机
  11. 机器学习面试-数学基础
  12. 剑指offer 面试63题
  13. 主谓宾定状补......
  14. matlab数据接口技术,Matlab与Pspice的数据接口技术
  15. 【转】【GO】9.go:linkname
  16. opencv h264压缩视频
  17. 随着XAG加密圈影响力不断增强,吸引全球最大行情站点CMC收录瑞波基因XAG
  18. rust大油田分解机_睡梦中,狂风起!大棚棉被刮翻了,卷帘机也连带吹坏了......
  19. 四川农业大学计算机考研难度,四川农业大学考研难吗?一般要什么水平才可以进入?...
  20. 网络隔离的办公网和互联网,如何安全地进行数据交换?

热门文章

  1. 2022蓝桥杯B组—积木画——递推算法
  2. Android初级教程短信防火墙
  3. jetson nano风扇控制、远程控制和远程桌面
  4. 立方体在三维坐标中的旋转(3D,Spining)
  5. Spring Boot 五种热部署方式
  6. C语言:L1-054 福到了 (15 分)
  7. ★ 最长递增子序列问题 (最多不相交路径)(分层思想) 网络流最大流
  8. 主数据管理系统(MDM)的四种实现风格
  9. Peewee 使用手册
  10. mac os 开启redis_在Mac os x 安装 Redis