最近更新了两次corrplot包,最新的0.60版本较之前的0.40进步较多。之所以取名为0.60版本,意味着此包的自评分终于上了60的及格分数,也有可能是这个包的最终版本。corrplot的应用范围很明确,就是中小矩阵 (<100*100) 的可视化,尤其是中小相关矩阵、距离矩阵、相似度矩阵等。

本次主要变动如下:

  1. 彻底解决了空白边距过大问题(尤其在文本标签较长时候),这个是个历史遗留问题,之前的方法比较原始简陋,已经有好多人发邮件投诉了(要不我也没动力更改);现在迭代来计算strwidth直至收敛,可以精确计算文本的长宽度了。控制文本大小的参数 tl.cex 也更精准了。
  2. 修订了参数名称和帮助文档,之前的参数取名、帮助文档太随意了。比如”PCA”排序就会让人错觉以为是第一主成分,目前更改成了更为妥当的”AOE”,是angular order of the eigenvectors的意思,具体参见文档。而第一主成分用”FPC”来表示了;此外,从效果来看,”AOE”排序结果一般都比”FPC”要好。提到矩阵排序,seriation包已经很NB了,更多方法可以参见此包。PS: 作者之一Kurt Hornik是R Core之一,是CRAN的主要维护人,每天都要check、答复新进来的包,德艺双馨、产出惊人,是绝对的教授中的战斗兽。
  3. 增加了zoom参数,来放缩原矩阵,使之可以轻松地应用到非[-1,1] 的矩阵;同时增加了参数cl.lim,使得颜色轴标签上只显示需要展示的部分。当然,此时颜色轴上的标签也会和缩放前的一样。
  4. 增加了横轴文本标签的旋转角度参数tl.srt,这个我虽不喜欢,但有人希望加这个方便阅读。总结来看,corrplot的每次更新都是有人发邮件说需要这样那样的功能……
  5. 增加、删除了一些函数。主要是加了corrMatOrder() 和corrplot.mixed () 函数来做矩阵排序和混合可视工作。删除了corrplot.*()系列不那么常用的函数。
  6. 进一步优化了代码并谨慎地选择了各个参数的默认值。虽然这个没有什么技术难度,但因为涉及到的很多都是绘图,审美之类的对我这种时常喜欢纠结的土人实在很麻烦…… 其实,更新最多的时间竟然花在了默认参数的选择之上,这个可能和我的星座有关!!

可视化是数据&模型&结果的美学展示,其中在图形展示这一块主观性较强,因此corrplot很注重各个细节,提供了很多选项让大家自己选择。但就因为这这样,corrplot函数的参数多达43+个,显得很累赘。这就是所谓的双刃剑吧。

此外,为了体验GitHub,我把corrplot主页从Rforge上迁移到了GitHub: https://github.com/taiyun/corrplot 如果有什么问题或者新的需求请到Issues那里提出。

再此外,我把R与最优化的文档也放在GitHub上了: https://github.com/taiyun/Optimization-using-R ,我自己近来空闲时间很少了,希望感兴趣的同学能对这份文档增删添补,以方便大家快速、便捷地查阅、使用。

为了使得本博文不那么呆板,文末以图会友吧:

 

前几天更新了下corrplot,修正了一个配色上的bug(感谢陈钢师兄),并且加了我个人不太喜欢的混合形式的矩阵可视化方法(就是上下三角分别用两种形式画图,虽然花哨,但我觉得不伦不类的);萝卜青菜,各有所爱,经常有人发邮件建议加入这个功能,故修改了下函数来满足各路神仙的需求。corrplot当前的示例图片见此(共58张图片)。

新添加的混合方法的示例代码和图片如下,一个方圆、一个扁圆(个人觉得像是用来把玩的工艺品,而不是统计图形了):

library("corrplot")
corr <- cor(mtcars)
## 天圆地方
corrplot(corr,order="PCA",type="upper",addtextlabel="no")
corrplot(corr,add=TRUE, type="lower", method="square",order="PCA",addtextlabel="d")
## 天圆地扁
corrplot(corr,order="PCA",type="upper",addtextlabel="no")
corrplot(corr,add=TRUE, type="lower", method="ell",order="PCA",addtextlabel="d")

天圆地方

天圆地扁

不知道下一次更新又是什么时候,不过我希望最终版本号能比较靠近1.00~

############ 跑题 ###########

《长恨歌》曰:春风桃李花开日,秋雨梧桐叶落时。我觉得这两句极尽春秋之神韵,寥寥十四字意境全出,且留给读者无尽的遐想。今儿天气有变,让我稍稍嗅到了秋天的味道,虽未落雨,但还是在标题中加上一句“秋雨梧桐叶落时”,让corrplot乘机也附庸下风雅。

此外,天气转凉,暖气也快来了,但我还是干板+凉席,并且觉得很是惬意,不知在北京我会不会一年四季都这么继续下去。

 

先来一个绣花枕头(并非贬义)版本,当置信上下界(下图中为95%)同正同负时,勾勒一个圆环,外圈所围面积为置信上界,内圈所围面积为置信下界。当置信上界和下界符号不同时,画两个圆,先画绝对值较大的,再画绝对值较小的,并用不同颜色以示区分-,这样以来,上下界皆可看清,并且跨越0的置信区间对应的图就不是圆环了。图中的红叉表示不显著的系数(a=0.05)

上图看来新奇,但展示置信区间还是用长度直观明了,下图为不同置信水平下置信区间的动画演示。每个矩形上下边的黑线分别为上下置信界,中间的黑线(并不是上下界的均值!)为相关系数大小,水平的点划线为0基准线。随着置信水平(1-a)的增大,置信区间长度不断增大。

该gif动画较大,440k左右,网速慢的可能得稍候几秒,pdf版本见此

更多例图,参见我的Google Docs,共56张图形,恰合我华夏名族之数目(美其名曰corrplot华夏图?)。国内google docs 在线查看速度可能比较慢,下载后用pdf浏览器全屏观看效果为佳。

上面的所有图片代码都在corrplot-0.3版本之中,目前还没有在CRAN上,Rforge估计还得一两天。(注:现在已在了)

近来生成swf、gif等动画都是animation之功劳,很是方便,感谢YH:)

———————————–分割之—————————————
corrplot 0.3版本变动如下:

1. 发现原来代码有些地方还是累赘,还有小bug,精简并kill 了一下bug,目前没有一个for循环(这种仇视for的心态或许并不好)。
2. 原来变量名起得不好,这次大动了手术,争取见名知意,且能迅速记住,并不发生混淆。
3. 进一步做好细节工作,主要是文本标签和颜色标签,提供了更灵活的布局方式,从上面提到的corrplot华夏图中即可见端倪,比如颜色棒可选择在右或下,并可以自由控制宽度。

目前的corrplot包一个优点是很灵活,可以自由控制很多东西;但同时,这个优点也是成了它最大的缺点,那么多参数,看得人眼花。

 

更新了一下corrplot包,变动如下:

1.  解决了之前的一些小bug,并且把原来的一些for()循环用*apply函数重写了一下。
2. 增加了corr.rect()函数,可以在相关阵的图上面框框,类似于谱系图上面的那种矩形,即将原来的多个变量分为n类。这两种图(见图1、图2)可以好好比较一下,各有特点。
3. 在原先的corrpot()函数中,当排序方式为系统聚类时,可以根据聚类结果直接加框框,具体由rect.hc, rect.col, rect.lwd三个参数控制。当然,也可以在图画完之后,用corr.rect()函数再加,只不过方便性上打了折扣。

目前,CRAN主页上新版已经出炉,国内中科院的两个镜像还没有同步,大约得半天左右吧(香港那个镜像早已废弃)。此外,WINDOWS下默认的图形设备在绘制png等非矢量格式图时,效果欠佳,建议用Cairo包或者cairoDevice包来生成质量较高的png图片。

图 1 corrplot画出来的

图1代码如下:

corrplot(cor(mtcars), order="hclust", rect.hc = 3)

图2 传统的聚类谱系图,可以与图1好好比较一番


再放一个图1和图2的联姻图:

图3 二者之联姻,和heatmap有些相似

corrplot包的其他问题:

1. DESCRIPTION文件里面的suggests package里面不小心加了个rgl包,悲剧悲剧。
2. corrplot()函数参数过多,现在是38个左右,很多时候我自己都要返回去看看参数意义,显得比较累赘。
3. 变量的文本标签的计算方法不太好,有时得多次调解cex参数,比较麻烦,这个是个比较大的问题。
4. 之前,准备多做做变量排序的事情,后来发现seriation包已经做得非常好了,其中一位作者Kurt还是R core之一,每次提交package时,几乎都是他把关。corrplot包的定位还是轻量级,在维数<50的时候娱乐娱乐。

欢迎广大朋友批评指正。

© 2010 优秀是一种习惯 taiyun.wei@cos.name Suffusion theme by Sayontan Sinha