和谐曲线图在R中的几种差异实现
自从去年刚学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包,虽然范畴也不止和谐曲线,尚有脸谱图、平行坐标图(表面图)等等,玩一玩挺不错。