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

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

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

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

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

1回答

1128閲覧

R、ggplotを使ってのグラフの描きかたがわかりません

hiraimar

総合スコア15

R

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

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2018/08/22 10:18

R超初心者です。
下のようなDataFrameがあり、pre, 0min, 1min, 5min, ...., 30minをX軸として、boxplot + dotplotの重ね合わせのグラフを作りたいのですが、うまくいきません。これらのデータから直接、平均と標準偏差の折れ線グラフでもいいのですが、どのようにコードしたらいいのでしょう?
"data_raw"の生データがあり、カラムに名前をつけて、その後にグラフを描こうとしても、plotがでてきません。どのようにyを定義したらいいのかわかりません。基本的な質問だと思うのですが、どなたか助けて頂ければ幸いです。
よろしくお願いします。

colnames(data_raw) <- c("pre","0min","1min","5min","10min","15min","20min","25min","30min")
library(ggplot2)
ggplot(data=data_raw, aes(x=colnames, y=count)) + geom_boxplot()

pre 0min 1min 5min 10min 15min 20min 25min 30min
1 303 312 324 304 324 326 339 345 346
2 278 316 315 301 313 313 305 310 310
3 194 217 216 205 213 212 215 221 222
4 150 170 170 162 170 173 171 173 173
5 84 94 94 91 94 97 98 100 102
6 224 241 240 228 241 248 251 252 238

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

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

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

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

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

guest

回答1

0

ベストアンサー

早い話、どこにも定義されていないcolnamesだのcountだのをいきなりx,yに当てはめようとしたところで、うまく行くはずがないですね。

たとえばここに実例があります。
https://stats.biopapyrus.jp/r/ggplot/geom-boxplot.html

例で使われているデータフレームとggplot()の使い方をよく見てみましょう。そしてあなたの書いたプログラムと比較してみましょう。

追記:データフレームの変形

私の誘導がまずかったようです。考察すべきはggplotの使い方というよりdataframeの変形の手順でしたね。

ggplotで使うために、データフレームの列とグラフ上のx,yが1:1対応するような形にしなければなりません。
そのための便利な関数があります。

library(dplyr) data_raw <- read.table(text=" 303 312 324 304 324 326 339 345 346 278 316 315 301 313 313 305 310 310 194 217 216 205 213 212 215 221 222 150 170 170 162 170 173 171 173 173 84 94 94 91 94 97 98 100 102 224 241 240 228 241 248 251 252 238 ") colnames(data_raw) <- c("pre","0min","1min","5min","10min","15min","20min","25min","30min") data_mod <- data_raw %>% tidyr::gather(key=time, value=count)

元データ(data_raw)と変形後のデータ(data_mod)を見比べてください。
複数列に分かれていたデータが1列にまとまり、なおかつ、それぞれのデータがもともと所属していた列の名が新たな列("time")の中に記述されているのがわかります。

これでggplotのx,yとして使える列がそろったわけです。ggplotのaesの中にこの列名を指定します。これでたぶん求めているグラフが描けるのではないでしょうか。

g <- ggplot(data_mod, aes(x=time, y=count)) + geom_boxplot() plot(g)

投稿2018/08/22 16:13

編集2018/08/23 19:11
KojiDoi

総合スコア13669

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

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

hiraimar

2018/08/23 02:04

御返事有り難うございます。仰る通りです。 早速教えて頂いたサイトを参考にして下のようにコードを書いてみたのですが、 Error: Aesthetics must be either length 1 or the same as the data (1): x, y と出てきてしまいます。 もともとのdata frameのデータに、どのようにx, yをassignしたらいいのかが分かっておりません。。 基本的な質問で大変申し訳ございませんが、教えて頂ければ幸いです。 library(ggplot2) a <- data.frame( Time = c(rep("pre", length("pre")), rep("0min", length("0min")), rep("1min", length("1min")), rep("5min", length("5min")), rep("10min", length("10min")), rep("15min", length("15min")), rep("20min", length("20min")), rep("30min", length("30min")), Value = c("pre","0min","1min","5min","10min","15min","20min","25min","30min") ) g <- ggplot(data=a, aes(x=Time, y=Value)) g <- g + geom_boxplot() plot(g)
KojiDoi

2018/08/23 03:53

length("pre") これは何をしようとしたのですか。ものすごくナンセンスなことになっているので、お手本とよく見比べてみてください。
hiraimar

2018/08/23 07:03 編集

データの長さが必要なのかと思い、お手本のようにやってみたのですが、確かにナンセンスですね。。もとのデータフレームですでに名前を割り当ているのに、再度同じ名前を割り当てなおすのも、ナンセンスな気がします。 これは時系列にとってきたシグナルのデータで、それぞれのcolumn(時間)に30個以上のデータがあります(上のテーブルでは6個づつになっていますが)。それを時間ごとにボックスプロットで比較したいのです。 恐らくggplot用にデータフレームを変形しなくてはいけないのかな、と思うのですが、そのやり方がわかりません。 お手本では、最初にggplot用にデータを整形してしまっているので、その形に持っていく方法がよくわからないのです。 昨日から四苦八苦していて、困っております。 すみませんが、ヒントを頂けないでしょうか。。
hiraimar

2018/08/24 00:34

私の質問の仕方が悪くて、混乱させてしまい申し訳ありませんでした。 的確なご回答ありがとうございます。 素人すぎて、ggplot用にデータを変形するというアイディアが、ありませんでした。途中でそれに気づいたのですが、reshape2やらmeltが使えなくなってしまったようで、tidyrのところまで昨晩ようやくたどりつきましたが、コードが複雑で困っておりました。 具体的なコードを示して頂き、有り難うございます。助かりました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問