操纵数组的子部分

时间:2011-09-15 13:05:16

标签: image r thumbnails

我正在使用R绘制试图有条件地改变数组的部分 基于数组的列。

我已经完成了以下步骤:

x<-array(1,dim=c(4,4,3))
r<-x[,,1]
g<-x[,,2]
b<-x[,,3]

r1<-apply(r[,2:3],1:2,function(f){return(0)})
g1<-apply(g[,2:3],1:2,function(f){return(0)})
b1<-apply(b[,2:3],1:2,function(f){return(0)})

r3<-cbind(r[,1],r1,r[,4])
g3<-cbind(g[,1],g1,g[,4])
b3<-cbind(b[,1],b1,b[,4])

# Pass to pixmapRGB

这是有效的,但由于我是R的新手,我想知道是否 有一种更有效的方法来操纵零件 一个数组。

例如,是否知道它正在处理哪个元素?

更大的图景是我想绘制一个时间序列分散图 绘制了许多页面。

我想在页面的一角有一个缩略图 整个系列的图表。我想给一部分颜色 缩略图用不同的颜色来表示它的范围 当前页面正在检查。

有很多数据,因此重绘新图不可行 每页的缩略图。

我所做的是先将缩略图写入tiff文件。 然后我读回了tiff文件,使用了pixmap的getChannels 将图片分成数组,并使用上面的代码进行更改 一些基于列的像素。 最后,我使用打印图像到视口   pixmapRGB / pixmapGrob / grid.draw

似乎有很多步骤。我会感激任何指针 这将有助于我提高效率。

3 个答案:

答案 0 :(得分:3)

也许我不明白你的问题,但是如果你要做的只是“根据列更改一些像素”,为什么不用基本数组索引来做到这一点?

这将与您发布的内容相同:

x<-array(1,dim=c(4,4,3))
r<-x[,,1]
g<-x[,,2]
b<-x[,,3]
r[,2:3]=0
g[,2:3]=0
b[,2:3]=0

这有用吗?

答案 1 :(得分:1)

或许更多的是评论而不是答案,但是当我尝试绘制多个页面时,我通常会从左到右,将图分解为分位数并设置适当的xlim(或{{1} })

ylim

不知道如何将缩略图叠加到图表上,但我认为如果您保存缩略图,可以使用其中一个x <- rnorm(100000) y <- rnorm(100000) df <- data.frame(x,y) seq1 <- quantile(df$x, probs = seq(0,1,0.1)) seq2 <- quantile(df$x, probs = seq(0,1,0.1)) for(x in 1:(length(seq1)-1)) { plot(df, xlim=c(seq1[x],seq1[x+1])) } 函数执行此操作。

答案 2 :(得分:0)

您可以通过以缩小的比例实际重新绘制整个图表来避免读取和粘贴tiff缩略图。查看par(fig),然后执行类似

的操作

Rgames: plot(1:2,1:2)

Rgames: par(mar=c(.1,6,.1,.1),new=T,fig=c(0,.25,.5,.75))

Rgames: plot(1:2,1:2)

Rgames: polygon(c(1,2,2,1),c(1,1,2,2),col='red')

(“Rgames:”是我的提示) 您必须使用保证金值,但这将设置您的“迷你图表”。

相关问题