我有一个大型数据帧(下面的小类似示例),我想使用image()在矩阵中显示值。 首先,它正在绘制从右侧第1列开始并从右向左开始的列,但是,我希望它在左侧绘制第1列,然后从左向右绘制。
其次,我想在图中添加一个“颜色条”,表示第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制作一个'瘦'条纹图。然而,它不是“堆叠”条形图(虽然高度是一个向量,旁边= FALSE。因此,当我使用布局组合它们时,它抱怨没有足够大的边距。
有关堆叠条形图或其他更复杂解决方案的任何帮助。 感谢
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)
答案 0 :(得分: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)并使用相同的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'))