2

私は現在、次の形式のデータセットを持っています: (x, y, type)

R を介して Postgres でプロットする例にあるコードを使用しました。

私の質問は、一意の「タイプ」列ごとにRに複数のグラフを生成させるにはどうすればよいですか?

私はRを初めて使用するので、これが非常に簡単なものであり、Rのループの理解が不足している場合はお詫びします.

したがって、次のデータがあるとしましょう。

(1,1,T), (1,2,T), (1,3,T), (1,4,T), (1,5,T), (1,6,T), 
(1,1,A), (1,2,B), (1,3,B), (1,4,B), (1,5,A), (1,6,A), 
(1,1,B), (1,2,B), (1,3,C), (1,4,C), (1,5,C), (1,6,C), 

ページ上に 4 つの個別のグラフをプロットします。タイプ T、A、B、および C のそれぞれに 1 つ [プロット x、y]

入ってくるデータが上記のデータのように見える場合、R でそれを行うにはどうすればよいでしょうか?

4

3 に答える 3

6

他の投稿にはいくつかの良い情報がありますが、それをすべて行うためのより高速な方法があります。したがって、データ フレームまたはマトリックスが呼び出さDFれ、上記の形式 (それぞれ(1,2,B)または何でも行) であると仮定すると、次のようになります。

by(DF, DF[,3], function(x) plot(x[,1], x[,2], main=unique(x[,3])))

以上です。

4 つのプロットをすべて同じページに表示したい場合は、最初にグラフ作成parオプションを変更できます。

par(mfrow=c(2,2))

そして終わったらデフォルトに戻しますpar(mfrow=c(1,1)

于 2012-11-08T21:52:24.963 に答える
4

user1717913ggplot2が提案するのと同じことを行いますが、構文が少し異なります (他の多くのことを非常にうまく行うため、私はそれが好きです)。

test <- data.frame(x=rep(1,18),y=rep(1:6,3),type=c("T","T","T","T","T","T","A","B","B","B","A","A","B","B","C","C","C","C"))

require(ggplot2)
ggplot(test, aes(x=x, y=y)) + #define the data that the plot will use, and which variables go where
  geom_point() + #plot it with points
  facet_wrap(~type) #facet it by the type variable

ここに画像の説明を入力

于 2012-11-08T21:57:55.957 に答える
1

Rほとんどのことを実行するためのさまざまな方法があるという点で、非常に優れています。私が行う方法は、データをグループに沿って分割し、グループごとにプロットすることです。
これを行うには、splitコマンドが必要です (データは というオブジェクトにあると仮定しますdata):

data.splitted <- split(data, data$type)

これで、データは次の形式になります (A、B、および C の 3 つのタイプがあるとします)。

data.splitted  
 L A
 | L x y type
 |   1 4  A
 |   3 6  A
 L B
 | L x y type
 |   3 3  B
 |   2 1  B
 L C
   L x y type
     4 5  C
     5 2  C

等々。次のように、グループ A の y 列の「4」を参照します。

data.splitted$A$y[1]またはdata.splitted[[1]][[2]][1]うまくいけば、両方を一緒に見るだけで十分な意味があります。

データが分割されたので、さらに近づいています。一連のグラフを同じウィンドウにプロットしたいことを
伝える必要があります。Rさて、これはその方法の 1 つにすぎません。また、各グラフを画像ファイル、pdf、または必要なものに書き込むように指示することもできます。
groups <- names(data.splitted)後で参照できるように、さまざまな型を変数に入れます。

par(mfcol=c(length(groups),1))

mfcol を使用すると、グラフが垂直方向に塗りつぶされます。mfrow オプションは横方向に塗りつぶします。c()入力を組み合わせるだけです。はlength(groups)、グループの総数を返します。
これで、for ループに取り掛かることができます。

for(i in 1:length(data.splitted)){   #  This tells it what i is iterating from and to.
                                     #    It can start and stop wherever, or be a 
                                     #    sequence, ascending or descending,
                                     #    the sky is the limit.
tempx <- data.splitted[[i]][[x]]     #  This just saves us
tempy <- data.splitted[[i]][[y]]     #    a bunch of typing.
plot(tempx, tempy, main=groups[i])   #  Plot it and make the title the type.
rm(tempx, tempy)                     #  Remove our temporary variables for the next run through.    
}

ご覧のとおり、コンポーネントに分解するとそれほど悪くはありません。これでほとんど何でもできます。現在取り組んでいるプロジェクトがあり、別のfor ループを使用して計算した 18 個の LIDAR メトリックに対してこれを実行しています。読むべきコマンド:

split, plot, data.frame, "[", 
par(mfrow=___) and par(mfcol=___)

ここでは、作業を開始するための役立つリンクいくつか紹介 します。すべての中で最も役立つものは、すぐに組み込まれています。a の後にコマンドを入力すると、そのコマンドの HTML ヘルプがブラウザに表示されます。 幸運を!R?

于 2012-11-08T21:00:44.500 に答える