标签:
R语言里的image方法可以绘制CEL文件的灰度图像。我们先来讨论image这个的函数:
如:x <- c(0:2)
y <- c(0:2)
m <- matrix(c(1,5,10,17,20,25,15,30,22),3,3)
image(x,y,m)
得到:
这里定义了一个3*3的矩阵,X坐标和Y坐标都从1变化到3,image函数就给这9个函数分配颜色,数越小颜色越偏深。默认的颜色是橘色。我们也可以设置为其他的颜色如黑灰:
image(x,y,m,col=gray(c(0:9)/9))。当然,这里的(0,0)坐标在左下角。
R语言绘制CEL文件的灰度图像和上例的原理是一样的,m*n的阵列,每个位置有一个对应的探针强度,颜色是gray(c(0:64)/64)(这里共有64个灰度,这是源码的设置),探针强度的数值被分配到到这64个灰度,数值越小颜色越深。下图是HG-U133_Plus_2阵列某样品的灰度图像(R语言作图):
library(affy)
rawData <- ReadAffy()
image(rawData)
一直纳闷的是,为什么这张图是矩形的,不是说好了行数和列数相等吗?而且图像的质量也不高,放大左上角根本就看不清芯片的型号。假如我想获得高清图片呢?也许是有解决办法的,但是目前我还不清楚用R语言怎么得到质量更高的灰度图像。
于是尝试着用Java作灰度图像。其实我也没深究过image函数的源码,不清楚它具体是怎么给数值分配颜色的,那就暂且自己“发明”一些方法吧。我们知道,一个颜色有着对应的RGB值,黑色是(0,0,0),白色是(255,255,255),当R=G=B且在都在0~255的范围时就是灰色调。假设某个探针的原始强度为intensity,计算int R=(int)(log2(intensity)*255/10-120),那么它对应的颜色就是new Color(R,R,R),当然要写上一些限制:R<0则R=0,R>0则R=255,这样就不会超出范围了。这样每个探针都有着对应的灰度了。以左上角为坐标(0,0),给每个探针绘制一个像素,得出了以下这张图:
这张图的质量高很多。放大这张图的左上角:
“GeneChip HG-U133A Plus2”的字样是不是就清晰可见了呀?不知你们可曾发现,在讨论版本3的CEL文件格式时,会看到MEAN那一列的前面很多行的数值都呈现“小大小大小大”的规律呀,而且说过数值越小颜色越偏暗,那么你们总算明白了灰度图像最外层的“花边”是什么回事了吧……
标签:
原文地址:http://www.cnblogs.com/xianwen/p/4522275.html