質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

1069閲覧

行の値でグラフを描きたい

pomme_gramimg

総合スコア7

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/05/24 14:38

編集2020/05/25 00:20

R studioのplot関数を用いて行でグラフを描きたいです。以下のようなデータを扱っています。

備考 1_2 1_3 1_4 1_5 1_6 1_7 1_8 1_9  1_10 備考
NA   0.1 0.2 0.4 0.3 0.2 0.1 NA NA NA NA
NA  0.1 0.1 0.3 0.2 0.2 0.1 0.1 0.2 0.1 NA
NA   0.1 0.2 0.2 0.2 0.2 0.3 0.4 NA NA NA
NA   0.1 0.1 0.2 0.3 0.3 0.1 0.2 0.1 NA NA

. . .

このような具合で1行目は列名、あとは数値が並んでいますが、2行目以降の1_2から1_10までを行で1行ずつ線をつないでプロットしたいです。(表記的におかしいですが、(x,y)=(0,0), ( 1/2, 0.1),(1/3, 0.2),(1/4,0.4),....,(1/1, NA)次の線は(0,0),(1/2, 0.1),(1/3, 0.1),(1/4, 0.3),...,(1/10, 0.1)の点をプロットしていきたいです。)

・左右は別の数値が入力してあるので110行目から118行目までを使いたいです。
・行の数だけ線が現れるようにしたいです。
・列のはじめは本当は1/2,1/3,...,1/10と表したいですが今のところ読み込めていません。
・xとyのはじめの値は0にしたいです。

以下のように進めると、1/2,1/3,...,1/10を繰り返せていないのでx,yの数が合わないというエラーが出ます。plot(dat)だけにすると、セルの番号がx軸になり、うまくいきません。

x軸を1/2,1/3...に固定してプロットする方法、または1/2,1/3,...,1/10も行とセットで繰り返す方法はありませんでしょうか。

行の数だけ線が現れるようにしたいのでplot関数だけでなく、matplotという関数も使わないといけないのかと思っています。

#n行110行目から118行目までをplot
na.rm = FALSE
a <- nrow(compounds)
k <- 1:a+1
y <- compounds[k,110:118]

dat = c(0,compounds[n,110], compounds[n,111], compounds[n,112],
compounds[n,113], compounds[n,114], compounds[n,115],
compounds[n,116], compounds[n,117], compounds[n,118])

#c()内部だと分数計算しないため
axe1 <- 1/2
axe2 <- 1/3
axe3 <- 1/4
axe4 <- 1/5
axe5 <- 1/6
axe6 <- 1/7
axe7 <- 1/8
axe8 <- 1/9
axe9 <- 1/10

dat2 = c(0,axe1,axe2,axe3,axe4,axe5,axe6,axe7,axe8,axe9)

plot(x = dat2,
y = dat,
type ="l"
)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえずざっくり回答するので、不明な点や不足している部分があれば言ってください

R

1dat2<- c(0, 1/(5:2)) 2 3for (i in 1:10) { 4 plot(dat2, c(0,as.numeric(iris[i,1:4])),type="l",col=rainbow(10)[i],xlim=c(0,0.5),ylim=c(0,6)) 5 par(new=T) 6}

投稿2020/05/29 06:59

shimiken

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pomme_gramimg

2020/05/29 08:43

ご回答ありがとうございます。 iris[i,1:4]の部分をcompounds[i,110:118]でやってみましたが、「strsplit(log, NULL) でエラー: 文字列でない引数です 」となってしまいました。これはデータの方の問題なのでしょうか?
shimiken

2020/05/30 05:48

データの型の問題っぽいですね mode(compounds[1,110:118]) の実行結果を教えてください
pomme_gramimg

2020/05/30 06:26

mode(compounds[1,110:118]) [1] "list" となりました。
shimiken

2020/05/30 06:43

すみません、データの型は関係ありませんでした。 plotで引数を3つ以上指定した場合に出るエラーのようです。 「strsplit(log, NULL) でエラー: 文字列でない引数です 」 というエラーがでるまでに実行したコードを全て教えてください。
pomme_gramimg

2020/05/30 12:16

ほとんど書いて頂いた通りに書いたつもりですが... na.rm = FALSE dat2 <- c(0, 1/(10:2)) for(i in 1:10) plot(x = dat1, y = c(0,as.numeric(compounds[i,110:118])), type ="l", par(new=T), col =rainbow(10)[i], xlim=c(0,1), ylim=c(0,20) です。 データの中に行が全部NAの行がありますが、その辺は全然関係ないですかね?ggplotでもやってみているんですが、そこではそのようなエラーが出たので...
shimiken

2020/05/30 13:10

以下のように修正してください dat2 <- c(0, 1/(10:2)) for(i in 1:10) { plot(x = dat2, y = c(0,as.numeric(compounds[i,110:118])), type ="l", col =rainbow(10)[i], xlim=c(0,1), ylim=c(0,20)) par(new=T) }
pomme_gramimg

2020/05/30 13:23

中かっこを入れるのですね、 先ほどと同じエラーが出ました...。 strsplit(log, NULL) でエラー: 文字列でない引数です 追加情報: 警告メッセージ: par(new = T) で: プロットなしで par(new=TRUE) を呼び出しました
shimiken

2020/05/30 13:55

c(0,as.numeric(compounds[1,110:118])) の実行結果を教えてください
pomme_gramimg

2020/06/01 02:27

> c(0,as.numeric(compounds[1,110:118])) [1] 0.000 4.046 6.851 NA NA NA NA [8] NA NA NA となりました。(本当は質問したときのデータではないですが、0と1行目のデータが表示されています)
shimiken

2020/06/01 04:19

問題なさそうですね、、、 「strsplit(log, NULL) でエラー: 文字列でない引数です 」 というエラーがでるまでに実行したコードを compoundsというオブジェクトを作成するところも含めて 全て教えてください。
shimiken

2020/06/01 04:20

ちなみにNAは関係ないはずです。 iris2 <- iris iris2[1,3:4] <- NA head(iris2) dat2 <- c(0, 1/(5:2)) for(i in 1:10) { plot(x = dat2, y = c(0,as.numeric(iris2[i,1:4]))*i, type ="l", col =rainbow(10)[i], xlim=c(0,0.5), ylim=c(0,100)) par(new=T) }
pomme_gramimg

2020/06/01 07:10

もしかしてと思い上記書いて頂いたものをそのままコピペして数値を変えたところそれらしきものが出てきました!!文字化けでも起こしていたのでしょうか...?前にもFortranでそのようなことがありました。 ありがとうございます!!長い時間本当に申し訳ありませんでした...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問