ユーザ用ツール

サイト用ツール


サイドバー

目次

機械学習とは

プログラミング無しで機械学習

機械学習プログラミング入門

初めてのKeras2.0

初めてのTensorflow(YouTube)

初めてのChainer2.0

初めてのビットコイン

ビットコイン用語集

初めてのSolidityプログラミング

初めての医療統計

初めてのエクセルで医療統計

初めてのEZRで医療統計

初めてのRStudioでレポート作成

スマホアプリ作成ソフトIonic3

スマホアプリ作成ソフトIonic4

Ionicのためのjavascript tips

その他

NiftyCloudMobileBackend

税金など

Dokuwiki

ggplot2で折れ線グラフ

ggplot2で折れ線グラフ

ggplot2は、Rでグラフを描くときに便利なパッケージです。

使い方

1. RStudioにtidyverseを
インストール(ggplot2なども自動的にインストールされる)

2. library(tidyverse)

3. 元データを整然データに変換(gather関数)

4. グラフ描画のコードを記載(ggplot関数)

整然データについては、以下のサイトの解説が非常にわかりやすいです。

整然データとは何か
http://id.fnshr.info/2017/01/09/tidy-data-intro

開発環境

Windows 8.1 Pro (64-bit)
R Studio 1.1.383

0. RStudioにtidyverseをインストール

tidyverseをインストールすることにより、tidyrやggplot2なども自動的にインストールされます。

console画面(RStudioですと、左下の画面内に“console”タブがあると思います。)で、以下を入力して、tidyverseパッケージをインストールします。(ggplot2なども一緒にインストールされます。)

install.packages("tidyverse")

1.ExcelデータからR読み込み用csvファイルの作成

エクセルに書き込んでいくのですが、1行目にIDや年齢、糖尿病DMの有無などの項目を並べていき、2行目からは各症例の生データを打ち込んでいきます。できれば、項目もデータも『半角英数字』が望ましいです。もし欠損データがある場合は、『NA』と入力します。

今回は、以下のようなデータを用意します。糖尿病の7症例の3ヶ月間のHbA1c[%]の推移のデータだとします。

ID age sex DM HbA1c00M HbA1c01M HbA1c02M HbA1c03M
00001 56 M 1 7.3 7.4 7.3 7.4
00002 77 F 1 8.3 8.4 8.3 8.2
00003 68 M 1 7.1 7.0 7.0 7.0
00004 81 F 1 7.6 7.4 7.3 7.4
00005 42 M 1 10.1 8.4 7.3 6.5
00006 65 M 1 6.1 6.2 6.2 6.3
00007 68 F 1 7.8 7.4 7.9 8.4

エクセルの画面では以下のようになります。

上記のエクセルファイルは、以下からダウンロードできます。

book2.xlsx

ファイル > 名前をつけて保存 > CSV(コンマ区切り)(*.csv) で、“保存”をクリック。

この、book2.csvというファイルを、C:/r/R_data/ 下にコピーしておく。(R Notebookでファイルを簡単に指定できるように。)

2.csvファイルの読み込み

R Studioの画面で、“File” > “New File” > “R Notebook” をクリック。

下のような画面になる

チャンクの部分(灰色の部分)に、以下のように記載。

x <- read.csv("book2.csv")
x

チャンクの右側の三角ボタンをクリックして、チャンク内のコードを実行。

以下のようになる。

3.元データを整然データに変換(gather関数)

ggplot関数を用いてグラフを描画するためには、元データを『整然データ』(tidy data)に変換する必要があります。

整然データ“tidy data”については、以下のサイトの解説が非常にわかりやすいです。

整然データとは何か http://id.fnshr.info/2017/01/09/tidy-data-intro

R Studioの画面で、画面右上の方の、“Insert” > “R” で、新しいチャンク(灰色の部分)が挿入されるので、そちらに、以下のコードを記載します。

library(tidyverse)

x <- read.csv("book2.csv")

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)
data_plot_individuals

4. グラフ描画のコードを記載(ggplot関数)

各患者でHbA1cの時系列の折れ線グラフ(IDでグループ分け)

library(tidyverse)

x <- read.csv("book2.csv")

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)

a <- ggplot(data_plot_individuals, aes(x = key, y = value, group = ID, colour = ID)) +
  geom_line()
a

IDが数値扱いになり、色分けが変な風になってしまう。
そのため、as.character()関数を用いて、IDを文字列として認識させてから、ggplot関数でグラフを描画します。

library(tidyverse)

x <- read.csv("book2.csv")
x$ID <- as.character(x$ID)
x

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)

a <- ggplot(data_plot_individuals, aes(x = key, y = value, group = ID, colour = ID)) +
  geom_line()
a

男女で平均とSDを求める

library(tidyverse)

x <- read.csv("book2.csv")
x$ID <- as.character(x$ID)
x

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)

group_time_mean_sd <- data_plot_individuals %>%
  group_by(sex, key) %>%
  summarize(mean = mean(value), sd=sd(value))
group_time_mean_sd 

男女で平均とSDを求めて折れ線グラフ

library(tidyverse)

x <- read.csv("book2.csv")
x$ID <- as.character(x$ID)
x

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)

group_time_mean_sd <- data_plot_individuals %>%
  group_by(sex, key) %>%
  summarize(mean = mean(value), sd=sd(value))

b <- ggplot(group_time_mean_sd, aes(x=key, y=mean, group=sex, colour=sex)) +
  geom_line()
b

折れ線グラフにエラーバーをつける

library(tidyverse)

x <- read.csv("book2.csv")
x$ID <- as.character(x$ID)
x

data_plot_individuals <- x %>%
  gather(key, value, -ID, -age, -sex, -DM)

group_time_mean_sd <- data_plot_individuals %>%
  group_by(sex, key) %>%
  summarize(mean = mean(value), sd=sd(value))

b <- ggplot(group_time_mean_sd, aes(x=key, y=mean, group=sex, colour=sex)) +
  geom_line()

errors <- aes(ymax = mean + sd, ymin = mean - sd)
b <- b + geom_errorbar(errors, width = 0.2) + geom_point(aes(colour=sex, shape=sex), size=4)
b

参考文献

ggplot2 — きれいなグラフを簡単に合理的に
https://heavywatal.github.io/rstats/ggplot2.html

Plotting means and error bars (ggplot2)
http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/

2016-08-22 ggplot2を使って、折れ線グラフを作る-1
http://mukkujohn.hatenablog.com/entry/2016/08/22/215632

グラフ描画ggplot2の辞書的まとめ20のコード
https://mrunadon.github.io/ggplot2/

論文用の棒グラフと折れ線グラフをggplot2で描く
https://mrunadon.github.io/ThesisPlot/

R言語でデータの並べ替え
http://webbeginner.hatenablog.com/entry/2015/06/02/015010
→reshape2パッケージのmelt関数

reshape2
http://qh73xebitbucketorg.readthedocs.io/ja/latest/1.Programmings/r/library/reshape2/main/

整然データ“tidy data”とは何か?
http://id.fnshr.info/2017/01/09/tidy-data-intro/
『グラフ作成用のパッケージであるggplot2は、整然データを入力として受け付ける』

@wakuteka 2016年12月05日に更新 tidyr::gather( )とtidyr::spread( )でデータフレームを自在に変形する
https://qiita.com/wakuteka/items/a16783571794f12af2ac
2017年現在、ggplot2を用いる際には、

library(tidyverse)

してから、tidyrパッケージのgather()関数を用いるのがお勧めです。このページでは具体例を用いて解説させていただいています。なお、ggplot2は、tidyverseパッケージに含まれています。

参考文献2

ggplot2の使い方については、ggplot2の作者が著者の以下の本が非常にお勧めです。

ggplot2を用いたグラフの描き方については、以下の本が非常にお勧めです。

英語ですが、以下のサイトに非常によくまとまっています。

http://www.cookbook-r.com/Graphs/

リンク

ggplot2で折れ線グラフ.txt · 最終更新: 2018/10/07 (外部編集)