web-dev-qa-db-ja.com

Rでの単純なデータのプロット

次のデータを含むfoo.csvという名前のコンマ区切りファイルがあります。

scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

基本的に2つの質問があります。

1)最初の列(x軸)と2番目の列(y軸)をどのようにプロットしますか?私はこれを試しています(- このサイト を読んでから):

data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)

しかし、私はこのエラーを取り戻します:

Error in stripchart.default(x1, ...) : invalid plotting method

私が間違っていることは何か考えていますか? A クイックGoogle検索 は、同じ問題を持つ他の誰かを明らかにしますが、関連する回答はありません。更新:真ん中の2つの代入ステートメントをスキップしても問題なく動作することがわかりました。これはなぜですか?

2番目の質問は、最初の質問の後にかなり簡単に続きます。

2)最初の列(x軸)と他のすべての列をy軸にプロットするにはどうすればよいですか?最初に遭遇する問題を回避すれば、それはかなり簡単だと思いますが、Rには少しばかり慣れていないので、まだ頭を抱えています。

19
Chris Bunch

次の2行は必要ありません。

_scale <- data[1]
serial <- data[2]
_

スケールとシリアルは、_read.table_のヘッダーから既に設定されているためです。

また、_scale <- data[1]_は_data.frame_から要素を作成します

_  data[1]
1     5
2    10
3    12
4    15
_

一方、_read.table_のscaleはベクトルです

_5 10 12 15
_

そしてplot(scale, serial)関数はdata.frameではなくベクトルを期待しているので、

_plot(scale, serial)
_

Y軸にデータの他の列をプロットする1つのアプローチ:

_plot(scale,serial, ylab="")
par(new=TRUE) 
plot(scale,spawn,axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,for., axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,worker,axes=F, ylab="", type="b")
_

これを行うにはもっと良い方法があるでしょうが、それは私の現在のRの知識を超えています...

12
luapyad

あなたの例では、

_plot(scale, serial) 
_

scaleserialはどちらもデータフレームであるため、機能しません。

_class(scale)
[1] "data.frame"
_

以下を試して、プロットが生成されたらpoints()を使用して、残りの列をプロットできます。 3番目の列の範囲に対応するため、ylimplotパラメータを使用したことに注意してください。

_data <- read.csv('foo.csv', header=T)
plot(data$scale, data$serial, ylim=c(0,750))
points(data$scale, data$spawn, col='red')
points(data$scale, data$for., col='green')
points(data$scale, data$worker, col='blue')
_
7
andrewj

私はRの初心者ですが、1つのプロットで他のすべての列に対してスケールを描画し、印刷やプレゼンテーションに簡単かつエレガントに:)したい場合は、Hadley Wickham教授のパッケージggplot2&reshapeを使用できます。

インストール:

install.packages(“ggplot2”,dep=T)
install.packages(“reshape”,dep=T)

あなたの例を描く:

library(ggplot2)
library(reshape)

#read data
data = read.table("foo.csv", header=T,sep=",")

#melt data “scale vs. all”
data2=melt(data,id=c("scale"))
data2

   scale variable      value
1      5   serial   0.000178
2     10   serial   0.156986
3     12   serial   2.658998
4     15   serial 188.023411
5      5    spawn   0.000288
6     10    spawn   0.297926
7     12    spawn   6.059502
8     15    spawn 719.463264
9      5     for.   0.000292
10    10     for.   0.064509
11    12     for.   0.912733
12    15     for. 164.111459
13     5   worker   0.000300
14    10   worker   0.066297
15    12   worker   0.923606
16    15   worker 161.687982

#draw all variables at once as line with different linetypes
qplot(scale,value,data=data2,geom="line",linetype=variable)

ポイント(geom=”points”)、異なる変数のドット(colours=variable or shape=variable)、軸の調整、すべての線の個別オプションの設定など。

オンラインドキュメント へのリンク。

5
zzr

これを試して:

data <- read.csv('foo.csv')
plot(serial ~ scale, data)
dev.new()
plot(spawn ~ scale, data)
dev.new()
plot(for. ~ scale, data)
dev.new()
plot(worker ~ scale, data)
2

私はRのエキスパートにはほど遠いですが、data.frameが必要だと思います。

plot(data.frame(data[1],data[2]))

それは少なくとも私のRセットアップで何かをプロットします!

ルアピアドの答えのアドバイスに従って、私はこれを思いつきました。ヘッダーの名前を「scale」に変更しました。

scaling, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

次に:

foo <- read.table("foo.csv", header=T,sep=",")
attach(foo)
plot( scaling, serial );
2
anon
data <- read.table(...)
plot(data$scale,data$serial)
0
Tong Gao

それをプロットする簡単な方法があります:

https://code.google.com/p/simple-r/

このスクリプトを使用すると、次のように入力するだけです。

r -cdps, -k1:2 foo.csv

あなたが望むプロットを得るために。これを冗長モード(-v)にして、対応するRスクリプトを表示します。

0
Tom