この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| 
                    ggplot2で折れ線グラフ [2017/12/22] adash333 [リンク]  | 
                
                    ggplot2で折れ線グラフ [2018/10/07] (現在) | 
            ||
|---|---|---|---|
| ライン 26: | ライン 26: | ||
| R Studio 1.1.383 | 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 | ||
| ライン 59: | ライン 261: | ||
| <code> | <code> | ||
| library(tidyverse) | library(tidyverse) | ||
| - | library(ggplot2) | ||
| </code> | </code> | ||
| - | してから、tidyrパッケージのgather()関数を用いると良さそうです。(最初はこんなことを言われても訳わかんないと思いますので、具体例で解説させていただきたいと思います。) | + | してから、tidyrパッケージのgather()関数を用いるのがお勧めです。このページでは具体例を用いて解説させていただいています。なお、ggplot2は、tidyverseパッケージに含まれています。 | 
| ライン 68: | ライン 268: | ||
| + | ===== 参考文献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> | 
| - | ggplot2の使い方については、以下の本が非常にお勧めです。 | + | </html> | 
| - | <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> | + | |
| + | http://www.cookbook-r.com/Graphs/ | ||
| ===== リンク ===== | ===== リンク ===== | ||