2016-04-07 5 views
0

から複数の散布図を作成するために、どのように私は、私は、単一のデータフレームから複数の散布図を作成したいと思いますRは - データフレーム

 dw.05.art.rel.ch dw.10.art.rel.ch dw.15.art.rel.ch dw.20.art.rel.ch dw.25.art.rel.ch dw.30.art.rel.ch dw.35.art.rel.ch dw.40.art.rel.ch 
0.25  2.14751794  1.3573794   1.378441  1.0225707   1.250907  1.3704892   1.018457  1.1266434 
0.5  0.06980416  1.5074681   1.618793  1.3340371   1.153321  1.1491761   1.015098  1.0486423 
0.75  -0.53753859  0.5501804   1.215985  1.1780073   1.276440  1.1058739   1.128350  0.9961578 
1.00  -0.28508794  0.4966175   1.049642  0.9306377   1.008549  0.9741328   1.037897  0.9515636 
    dw.45.art.rel.ch dw.50.art.rel.ch 
0.25  1.0668396  1.0484025 
0.5   1.0080182  1.0074631 
0.75  0.9927887  0.9398075 
1.00  0.9711958  1.0396354 

以下のデータフレームを持っています。各行の値(例えば、0.25)はY値であり、列名の数字であるX値(例えば、「dw.05.art.rel.ch」は5)に対してプロットされる。添付されているのは、私がExcelで作った例です。私はX値を作成する方法と複数のプロットを生成する方法についていません。 enter image description here

+0

'matplot(配列(NcoI部位(DD))* 5、T(DD)、タイプ= 'L')'や 'プロットなど、PDFファイルとして保存し、コンソールにそれらを印刷することができます(c(5、40)、c(0、max(dd))、type = 'n'); – rawr

答えて

2

またggplot2を使用することができます。まず、データをワイドフォーマットからロングフォーマットに「溶かし」、カラム名からx値を抽出しましょう。あなたのデータフレームがdatと呼ばれていると仮定:

library(dplyr) 
library(reshape2) 
library(ggplot2) 

dat.m = dat %>% 
    add_rownames("group") %>% 
    melt(id.var="group") %>% 
    mutate(x = as.numeric(substr(variable, 4,5))) 

つのグラフ上のすべての行:

ggplot(dat.m, aes(x, value, colour=group)) + 
    geom_point() + 
    geom_line() + 
    theme_bw() 

複数のパネル:

ggplot(dat.m, aes(x, value)) + 
    facet_grid(. ~ group) + 
    geom_point() + 
    geom_line() + 
    theme_bw() 

そして、ここでは、グラフがどのように見えるかです:

は、

enter image description here

enter image description here

またgroupの値ごとに別々のグラフを作成できます。以下のコードは、plと呼ばれるリストのすべてのグラフ(groupの値ごとに1)を保存します。あなたは

pl = sapply(sort(unique(dat.m$group)), function(i) { 
    ggplot(dat.m[dat.m$group==i, ], aes(x, value)) + 
    facet_wrap(~ group) + 
    geom_point() + 
    geom_line() + 
    theme_bw() 
}, simplify=FALSE) 
0

あなたのケースは非常に単純です。なぜなら、列名は正規であるからです。あなたのデータフレームがdfと呼ばれると仮定します:

for (i in 1:dim(df)[1]){ 
    plot(as.numeric(substr(names(df), 4, 5)),df[i,]) 
} 

これは、すべてのプロットを基本的なフォーマットにします。

それとも

matplot(seq(ncol(df)) * 5, t(df), type = 'l') 

それとも

plot(c(5, 40), c(0, max(df)), type = 'n') 
for (ii in 1:nrow(df)) 
    lines(seq(ncol(df)) * 5, unlist(df[ii, ]), col = ii) 

データは

df <- read.table(header = TRUE, text = "dw.05.art.rel.ch dw.10.art.rel.ch dw.15.art.rel.ch dw.20.art.rel.ch dw.25.art.rel.ch dw.30.art.rel.ch dw.35.art.rel.ch dw.40.art.rel.ch 
0.25  2.14751794  1.3573794   1.378441  1.0225707   1.250907  1.3704892   1.018457  1.1266434 
0.5  0.06980416  1.5074681   1.618793  1.3340371   1.153321  1.1491761   1.015098  1.0486423 
0.75  -0.53753859  0.5501804   1.215985  1.1780073   1.276440  1.1058739   1.128350  0.9961578 
1.00  -0.28508794  0.4966175   1.049642  0.9306377   1.008549  0.9741328   1.037897  0.9515636") 
+1

これは実際には動作しますが、なぜdownvote、誰かが知っていません(この2人は1:nrow(dd))行(seq(ncol(dd))* 5、unlist(dd [ii、])悪い気分になっているに違いない – rawr