2011-09-15 6 views
0

私は、配列の列に基づいて条件付きで配列の一部を変更しようとするプロットに を使用しています。配列のサブセクションを操作する

私は、次のステップアウト働いている:これは動作します

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

多分私はあなたの質問を理解していないかもしれませんが、しようとしているのは単に "列に基づいていくつかのピクセルを変更する"だけでは、それを行うために基本的な配列のインデックスを使用しないでください?

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 

は役に立ちということです:

これは、あなたが投稿した同じことをしますか?

+0

この情報をお寄せいただきありがとうございます。配列の割り当てについて考えることを忘れないでください...しかし、私の例はやや単純すぎました。 サムネイルはグレースケールです。ピクセルが白い場合、コードは実際に を確認します。そうであれば、それを赤に変えます。 白でない場合、赤の値が増えて赤くなります。 – Casey

+0

これはどうですか:r [which(r == 0)] = 3; r [which(r!= 0)] = r [which(r!= 0)] + 1 – nsheff

+0

私の元々のアイデアは、 :)私は戻って、あなたの最初の解決策で配列のインデックスを使用し、わずかにすべてをreddened。ありがとう! – Casey

1

おそらく、答えよりも、コメントの多くのが、私は通常、分位にプロットを解体し、適切なxlim(または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])) 
} 

サムネイルを保存した場合、rimageのいずれかの関数を使ってサムネイルをグラフにオーバーレイする方法はありません。

+0

Brandonに感謝、私はggplotとgridを使っています。私は似たようなことをしますが、各ページで30分の6行に分割します。 – Casey

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:" 私のプロンプトです)やるあなたがプレーする必要がありますが ビットにマージン値を設定しますが、これにより "ミニグラフ"が設定されます。

+0

こんにちはCarl、 残念ながら、これは役に立ちません。 私のデータセットはかなり大きいです。 (私が扱っている最大のものは106万行です) 183kの小さなセットでは、大きなプロットと小さいプロットは同じ時間を とします。 – Casey

+0

小さなプロットは「ショー」のためのものなので、小さなサブセットやラスタライズされた画像を常にプロットすることができます。 'rasterImage'と関連するツールを参照してください。 –