2012-04-19 53 views
0

我有一个很大的数据框(下面有一个类似的小例子),我想使用image()显示矩阵中的值。 首先,它绘制了从右边第一列开始并且从右向左的列,但是,我希望它在左边的第一列进行绘图,然后从左向右进行绘制。使用图像()绘图并注释行

其次,我想添加一个'颜色条'的情节表明行1和行2具有相同的$ taxid,行3和行4具有相同的$ taxid。类似于热图中的“ColSideColors”。

有什么建议吗?

谢谢

df<-data.frame(taxid=c("A","A","B","B"),c2=c(1,2,3,4),c3=c(3,4,5,6)) 
nr<-dim(df)[1] 
nc<-dim(df)[2] 
z<-as.matrix(log(df[,2:3])) 
image(x=1:nc, y=1:nr, z=t(z), axes=FALSE, frame.plot=TRUE) 

好了,我现在已经决定尝试,并为colorstip一个“瘦” barplot。但是,它不是'叠加'barplot(虽然高度是一个向量,并且旁边= FALSE。因此,当我使用布局将它们组合在一起时,它抱怨没有足够大的边距。

任何关于堆叠barplot,或其他更复杂的解决方案 感谢

layout(matrix(c(1,2),1,2,byrow=FALSE),heights=c(1,1),widths=c(1,9)) 
barplot(as.vector(table(df$taxid)),width=0.1,beside=FALSE,col=rainbow(length(table(df$taxid)))) 
image(x=1:nc, y=1:nr, z=t(z), axes=FALSE, frame.plot=TRUE) 
+1

检查这个问题的答案:http://stackoverflow.com/q/10124180/1183242 – Sophia 2012-04-19 14:18:53

+0

具体而言,如关于你的第一个问题,如果你不喜欢列的顺序图像中,重新排列矩阵的列以满足您的需求。 – joran 2012-04-19 14:33:22

回答

0

可以使用rasterImage功能色带添加到现有的情节:

tmp <- as.raster( rev(c('#00ff00','#0000ff')[df$taxid])) 
par(xpd=NA) 
rasterImage(tmp, 3, 0.5, 3.1, 4.5, interpolate=FALSE) 

如果没有rasterImage选项,那么你可以覆盖2张图片。在下面,我将2列NA添加到原始矩阵并扩展x=参数,以便在右侧添加一个小空白区域,然后创建一个新的矩阵,并在第4列(所有其他NA)中使用taxid信息并使用它使用相同的x=,但使用add=TRUE,以便它在旧的顶部创建新的图像图(但只在先前的空白区域添加颜色,并且不会重叠绘制感兴趣的图像,因为这些值为NA)。

z2 <- cbind(z, NA, NA) 
image(x=c(1:3,3.05, 3.1), y=1:nr, z=t(z2), axes=FALSE) 

z3 <- cbind(NA,NA,NA, as.numeric(df$taxid)) 
image(x=c(1:3,3.05, 3.1), y=1:nr, z=t(z3), add=TRUE, col=c('#00ff00','#0000ff')) 
+0

> sessionInfo() ř版本2.9.1(2009-06-26) x86_64的未知-Linux的GNU 区域设置: LC_CTYPE = EN_US; LC_NUMERIC = C; LC_TIME = EN_US; LC_COLLATE = EN_US; LC_MONETARY = C ; LC_MESSAGES = EN_US; LC_PAPER = EN_US; LC_NAME = C; LC_ADDRESS = C; LC_TELEPHONE = C; LC_MEASUREMENT = EN_US; LC_IDENTIFICATION = C 附基础包: [1]统计图形grDevices utils的数据集的方法基础 经由加载命名空间(而不是附加): [1] tools_2.9.1 >?as.raster 没有关于指定程序包和库中的'as.raster'的文档: 您可以尝试'?? as.raster' – user1249760 2012-04-20 08:13:38

+0

谢谢,但我们在我们的系统上安装了旧版本的R(2.9.1),并且它看起来像as.raster只能在更新版本的grDevices中使用。在我们的R版本更新之前,这可以通过任何基本命令来完成吗?谢谢。 – user1249760 2012-04-20 08:21:53

+0

添加仅使用'图像'功能的示例。 – 2012-04-20 18:09:48