3

次のようなデータセットを使用しています:

1  48434  14566
1  56711  6289
1  58826  4174
2  56626  6374
2  58888  4112
2  59549  3451
2  60020  2980
2  60468  2532
3  56586  6414
3  58691  4309
3  59360  3640
3  59941  3059
.
.
.
10  56757  6243
10  58895  4105
10  59565  3435
10  60120  2880
10  60634  2366

最初の列の各値に対して 3 列目の R にプロットが必要です。つまり、上記のデータの場合、3 列目の値の (各グループ 1-10) の 10 の異なるプロットがあります。x 軸は反復回数で、Y 軸は最大 63000 の値です。また、ドットを赤色の線で結ぶ必要があります。私はRを初めて使用し、ドキュメントを読んでいますが、それは私をもっと混乱させました。どんな体でも助けてくれますか。

編集: V3 値の折れ線グラフが実際に必要です。v3 列の行数は x 軸、v3 の値は y 軸になります。そして、v1 で示されるグループごとに異なるグラフが必要です。チェイスの解決策は、軸をシフトすることを除いて機能します.V3値はy軸上にある必要があります.hereは例です 代替テキスト

EDIT2:@Roman、これが私が実行しているコードです。

library(lattice)
d <- read.delim("c:\\proj58\\positions23.txt",sep="")
d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- order(x$V3, decreasing=TRUE)
    x
}))
xyplot(V3 ~ iterations | V1, type="l", data=d)

これは私が得るエラーです、

    > 
>  source("C:\\proj58\\plots2.R")
> d
       V1    V2    V3 iterations
1.1     1 48434 14566          1
1.2     1 56711  6289          2
1.3     1 58826  4174          3
1.4     1 59528  3472          4

プロットが得られませんか?? 何が欠けていますか OK: 了解しました。何が間違っていたのかわからない。ここにあります、

代替テキスト

さらに 2 つのこと、ボックスの V1 ラベルを 1、2 などの実際の数値に変更する方法... 2 つ目は、100 個のグループを含むファイルがあり、1 つ試してみたところ、すべてのグラフが 1 ページに表示されました (明らかに判読不能)。これらを複数のウィンドウで作成しますか?

4

3 に答える 3

3

まず、最初の変数のサブセットごとに、行番号を使用して変数を作成する必要があります。これを行う1つの方法は、データセットを最初の変数で分割し、行番号を持つ新しい変数を作成して、再結合することです。

また、おそらくV1を因子(カテゴリ変数)にする必要があります。

d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- 1:nrow(x)
    x
}))
d$V1 <- factor(d$V1)

次に、latticeライブラリを使用して、次のようなことを行います

xyplot(V3 ~ iterations | V1, type="l", data=d)

プロットを複数のページに表示するには、layoutオプションを使用してページ上のプロットの数を制限します。そのためには、複数ページの出力をサポートするファイルにプロットを保存する必要があります。たとえば、5行5列の場合:

trellis.device("pdf", file="myplot.pdf")
p <- xyplot(V3 ~ iterations | V1, type="l", data=d, layout=c(5,5))
plot(p)
dev.off()

また、を使用してコードを実行したときにプロットを表示するにはsource、次のようにxyplotコマンドからの出力を具体的にプロットする必要があります。

p <- xyplot(...)
plot(p)

コンソールで実行している場合、デフォルトでplot(実際には関数)が呼び出されるため、これは必要ありません。print

于 2011-01-20T20:13:28.787 に答える
1

チェイスが言ったように、あなたが達成しようとしていることをよりよく想像できるように、あなたの質問を明確にしてください. 混乱の山に追加するために、ここlatticeにあなたが求めていると私が思うものの大まかな解決策があります.

library(lattice)
fdt <- data.frame(col1 = seq(from = 1, to = 10, each = 10),
        col2 = round(56 * rnorm(100, mean = 30, sd = 5)),
        col3 = round(20 * rnorm(100, mean = 11,)))
xyplot(col3 ~ 1:100 | col1, data = fdt)

代替テキスト

于 2011-01-20T20:40:49.350 に答える
0

私はあなたがプロットしたいものを正確にフォローしているわけではありませんが、ここに正しい道をたどり、適切なプロットコマンドを入力できるアプローチがあります...または質問を明確にし、最終結果が何であるかを説明しますあなたのプロットはより詳細に見えるはずです。

と の 2 つのパッケージを利用しplyrますggplot2。を使用plyrしてデータを適切なグループに分割しggplot2、実際のプロットに使用します。この関数を利用して、pdf()各ページに異なるプロットを配置します。

library(ggplot2)
library(psych)    #For copying in data, not needed beyond that.

df <- read.clipboard(header = F)

pdf("test.pdf")
    d_ply(df, "V1", function(x)     #Split on the first column
        print(qplot(x$V3))          #Your plotting command should go here. This plots histograms.
    )
dev.off()                           #Close the plotting device.

これにより、 nページの PDFが生成されます。ここで、 nは V1 (分割列) のグループ数を表します。JPEG 出力が必要な場合は、?jpeg またはその他の出力を作成するためのその他のグラフィック オプションを参照してください。

編集: ご覧のとおり、人々はあなたの質問をいくつかの方法で解釈しました。@Romanのソリューションがあなたが望むものである場合、これはほぼ同じggplotコードです

qplot(col2, col3, data = fdt, geom = "point") + facet_wrap(~ col1 , nrow = 2)
于 2011-01-20T20:07:16.073 に答える