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

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

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

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

Q&A

解決済

1回答

1348閲覧

グラフ作図について~統計R~

mrk_5200

総合スコア17

R

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

0グッド

0クリップ

投稿2018/04/29 06:18

編集2018/04/29 08:39

1990年~2018年の各年における12月~3月の4ヶ月間(計121日)だけを抽出し、時系列に並べたグラフを描きたいです。
しかしデータが多いせいか、プロットしてもただの散布図のようになってしまいます。点同士をつないだ折れ線を可視化することは厳しいのでしょうか?
また、この時系列データからトレンド検定などをして、変動特性を見ることは難しいのでしょうか。色々と調べてみましたが、中々解決に至っておりません。

イメージ説明

~追加情報~
気象統計を扱っており、データの中身を簡単に下に示すと、snowfallがその日の降雪量で、deviationが平均値からの差、つまり偏差を表しています。
その平均値には28年間の冬季における降雪が観測された日(snowfall>0)のみを抽出して算術平均をしています。
例えばある観測地点Aで28年間の平均値が4.5cmだった場合を考えます。降雪が観測された日(deviation>-4.5)のみをプロットして折れ線で見たいのですが、日付は連続的ではなく、バラバラになっているので、上の散布図がそれぞれの日付と対応しているのかも不安です。
最終的に、地点Aの偏差の時系列データから降雪量そのものは28年間冬季に渡って有意に増加or減少しているのかを定量的に示したいです。

>A
date snowfall deviation
1990/12/1 0      -4.5
1990/12/2 0      -4.5
:     
1991/1/1  1      -3.5
1991/1/2  3      -1.5
:
1991/2/1  12      7.5
:
:
1991/3/31 0      -4.5
1991/12/1 0      -4.5
:
:
:
2018/3/31 0      -4.5

hensa<-subset(A,deviation>-4.5)
plot(hensa$date,hensa$deviation,xlab="Date",ylab="偏差",type="l")

お手数をおかけして申し訳ありませんが、もし何か助言して頂ければ幸いです。

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

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

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

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

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

KojiDoi

2018/04/29 06:35

何のデータで、何の変動を見て、最終的に何を理解したいのかを書いてください。
CHERRY

2018/04/29 06:41 編集

どのようなデータをどのようにグラフ化したのか サンプルデータやソースコードを質問に追加することは可能でしょうか?
guest

回答1

0

ベストアンサー

とりあえず表示させるのは以下のコードでいけると思います。

R

1A %>% 2 # 12月~3月に絞るため、月を表す列を追加 3 mutate(year = year(date), 4 month = month(date)) %>% 5 # 1, 2, 3, 12 月のみを表示 6 filter(month %in% c(1, 2, 3, 12)) %>% 7 # 日付ごとに並び替え 8 arrange(date) %>% 9 # ggplot にデータを渡し、x を日付に、yを雪の量に設定 10 ggplot(aes(x = date, y = snowfall)) + 11 # データの点を表示 12 geom_point() + 13 # 線を表示 14 geom_line()

イメージ説明

年ごとに表示を分けたい場合は、最後に facet_warp をつけて上げれば大丈夫です。

R

1A %>% 2 # 12月~3月に絞るため、月を表す列を追加 3 mutate(year = year(date), 4 month = month(date)) %>% 5 # 1, 2, 3, 12 月のみを表示 6 filter(month %in% c(1, 2, 3, 12)) %>% 7 # 日付ごとに並び替え 8 arrange(date) %>% 9 # ggplot にデータを渡し、x を日付に、yを雪の量に設定 10 ggplot(aes(x = date, y = snowfall)) + 11 # データの点を表示 12 geom_point() + 13 # 線を表示 14 geom_line() + 15 # 年ごとに表示を分ける 16 facet_wrap(~ year)

イメージ説明

さらに移動平均的な線を入れたい場合は geom_smooth を追加すればいけます。

R

1A %>% 2 # 12月~3月に絞るため、月を表す列を追加 3 mutate(year = year(date), 4 month = month(date)) %>% 5 # 1, 2, 3, 12 月のみを表示 6 filter(month %in% c(1, 2, 3, 12)) %>% 7 # 日付ごとに並び替え 8 arrange(date) %>% 9 # ggplot にデータを渡し、x を日付に、yを雪の量に設定 10 ggplot(aes(x = date, y = snowfall)) + 11 # データの点を表示 12 geom_point() + 13 # 線を表示 14 geom_line() + 15 # smooth line 16 geom_smooth() + 17 # 年ごとに表示を分ける 18 facet_wrap(~ year)

イメージ説明

今回はデータ数が少ないので、上手く表示されていませんが、データ数が多いと以下のように表示されます。
(用いたデータはもともと R に入っているニューヨークのオゾン濃度・温度のデータです。データの内容が似ていたので使いました。)

R

1airquality %>% 2 ggplot(aes(x = Day, y = Temp)) + 3 geom_point() + 4 geom_smooth() + 5 facet_wrap(~ Month)

イメージ説明

ちないに今回は、データの操作に dplyr を、日付データ操作に lubridate を、グラフ化には ggplot を用いています。
ともに R ではデファクトスタンダードぐらい使われているパッケージなので、ご存知ない場合は調べておくとよいと思います。

dplyrを使いこなす!基礎編
lubridateパッケージ入門
ggplot2 — きれいなグラフを簡単に合理的に

投稿2018/04/29 10:26

ray.prorsum

総合スコア73

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

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

mrk_5200

2018/05/01 13:59

ご丁寧に、応用例まで示して頂き誠にありがとうございます。 回答してくださったコードをもとに試してみましたが、やはりデータが多かったため、自分の思い描いたようなグラフにはなりませんでした、、、 しかし、この機会にまた新たな関数を知ることができたので良かったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問