ユーザ用ツール

サイト用ツール


ggplot2で折れ線グラフ

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ggplot2で折れ線グラフ [2017/12/19]
adash333 [リンク]
ggplot2で折れ線グラフ [2018/10/07] (現在)
ライン 6: ライン 6:
  
 <​code>​ <​code>​
-1. RStudioにggplot2とtidyverseを +1. RStudioにtidyverseを 
-インストール+インストール(ggplot2なども自動的にインストールされる)
  
-2. library(tidyr)+2. library(tidyverse)
  
-3. 元データを整然データに変換+3. 元データを整然データに変換(gather関数)
  
-4. library(ggplot2) +4. グラフ描画のコードを記載(ggplot関数)
- +
-5. グラフ描画のコードを記載+
  
 </​code>​ </​code>​
ライン 22: ライン 20:
  
 整然データとは何か\\ 整然データとは何か\\
-http://​id.fnshr.info/​2017/​01/​09/​tidy-data-intro/+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なども一緒にインストールされます。)
 +
 +<​code>​
 +install.packages("​tidyverse"​)
 +</​code>​
 +
 +
 +===== 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 | 
 +
 +エクセルの画面では以下のようになります。
 +
 +{{:​pasted:​20171124-072636.png}}
 +
 +上記のエクセルファイルは、以下からダウンロードできます。
 +
 +{{book2.xlsx}}
 +
 +ファイル > 名前をつけて保存 > CSV(コンマ区切り)(*.csv) で、"​保存"​をクリック。
 +
 +{{:​pasted:​20171217-003135.png}}
 +
 +この、book2.csvというファイルを、C:/​r/​R_data/​ 下にコピーしておく。(R Notebookでファイルを簡単に指定できるように。)
 +
 +
 +===== 2.csvファイルの読み込み =====
 +R Studioの画面で、"​File"​ > "New File" > "R Notebook"​ をクリック。
 +
 +{{:​pasted:​20171217-000522.png}}
 +
 +下のような画面になる
 +
 +{{:​pasted:​20171217-000210.png}}
 +
 +チャンクの部分(灰色の部分)に、以下のように記載。
 +
 +<​code>​
 +x <- read.csv("​book2.csv"​)
 +x
 +</​code>​
 +
 +{{:​pasted:​20171217-003916.png}}
 +
 +チャンクの右側の三角ボタンをクリックして、チャンク内のコードを実行。
 +
 +{{:​pasted:​20171217-003957.png}}
 +
 +以下のようになる。
 +
 +{{:​pasted:​20171217-004016.png}}
 +
 +===== 3.元データを整然データに変換(gather関数)=====
 +
 +ggplot関数を用いてグラフを描画するためには、元データを『整然データ』(tidy data)に変換する必要があります。
 +
 +整然データ"​tidy data"​については、以下のサイトの解説が非常にわかりやすいです。
 +
 +整然データとは何か
 +http://​id.fnshr.info/​2017/​01/​09/​tidy-data-intro
 +
 +R Studioの画面で、画面右上の方の、"​Insert"​ > "​R"​ で、新しいチャンク(灰色の部分)が挿入されるので、そちらに、以下のコードを記載します。
 +
 +<​code>​
 +library(tidyverse)
 +
 +x <- read.csv("​book2.csv"​)
 +
 +data_plot_individuals <- x %>%
 +  gather(key, value, -ID, -age, -sex, -DM)
 +data_plot_individuals
 +</​code>​
 +
 +{{:​pasted:​20171227-215513.png}}
 +
 +
 +===== 4. グラフ描画のコードを記載(ggplot関数) =====
 +
 +各患者でHbA1cの時系列の折れ線グラフ(IDでグループ分け)
 +
 +<​code>​
 +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
 +</​code>​
 +
 +{{:​pasted:​20171227-215800.png}}
 +
 +IDが数値扱いになり、色分けが変な風になってしまう。\\  ​
 +そのため、as.character()関数を用いて、IDを文字列として認識させてから、ggplot関数でグラフを描画します。
 +
 +<​code>​
 +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
 +</​code>​
 +
 +{{:​pasted:​20171227-220537.png}}
 +
 +==== 男女で平均とSDを求める ====
 +
 +<​code>​
 +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 ​
 +</​code>​
 +
 +{{:​pasted:​20171227-222115.png}}
 +
 +==== 男女で平均とSDを求めて折れ線グラフ ====
 +
 +<​code>​
 +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
 +</​code>​
 +
 +{{:​pasted:​20171227-222259.png}}
 +
 +==== 折れ線グラフにエラーバーをつける ====
 +
 +<​code>​
 +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
 +</​code>​
 +
 +{{:​pasted:​20171227-222408.png}}
 ===== 参考文献 ===== ===== 参考文献 =====
 +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 2016-08-22
ライン 61: ライン 261:
 <​code>​ <​code>​
 library(tidyverse) library(tidyverse)
-library(ggplot2) 
 </​code>​ </​code>​
-してから、tidyrパッケージのgather()関数を用いると良さそうです。(最初はんなことを言われても訳わかんないと思いますので具体例解説させていただきたと思います。+してから、tidyrパッケージのgather()関数を用いるのがお勧めです。このページ具体例を用いて解説させていただいています。なお、ggplot2は、tidyverseパッケージに含まれています。 
  
  
  
  
 +===== 参考文献2 =====
 +ggplot2の使い方については、ggplot2の作者が著者の以下の本が非常にお勧めです。
  
 +<​html>​
 +<iframe style="​width:​120px;​height:​240px;"​ marginwidth="​0"​ marginheight="​0"​ scrolling="​no"​ frameborder="​0"​ src="//​rcm-fe.amazon-adsystem.com/​e/​cm?​lt1=_blank&​bc1=000000&​IS2=1&​bg1=FFFFFF&​fc1=000000&​lc1=0000FF&​t=twosquirrel-22&​o=9&​p=8&​l=as4&​m=amazon&​f=ifr&​ref=as_ss_li_til&​asins=487311814X&​linkId=26063d4041294b5aa9b961f0c1c4e172"></​iframe>​
 +</​html>​
  
 +ggplot2を用いたグラフの描き方については、以下の本が非常にお勧めです。
  
 +<​html>​
  
 +<iframe style="​width:​120px;​height:​240px;"​ marginwidth="​0"​ marginheight="​0"​ scrolling="​no"​ frameborder="​0"​ src="//​rcm-fe.amazon-adsystem.com/​e/​cm?​lt1=_blank&​bc1=000000&​IS2=1&​bg1=FFFFFF&​fc1=000000&​lc1=0000FF&​t=twosquirrel-22&​o=9&​p=8&​l=as4&​m=amazon&​f=ifr&​ref=as_ss_li_til&​asins=4873116538&​linkId=a45356b5efeff42f623fc074f71e9a97"></​iframe>​
 +</​html>​
  
 +英語ですが、以下のサイトに非常によくまとまっています。
  
 +http://​www.cookbook-r.com/​Graphs/​
 ===== リンク ===== ===== リンク =====
  

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