ユーザ用ツール

サイト用ツール


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 · 最終更新: 2020/05/23 by adash333

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki