ユーザ用ツール

サイト用ツール


サイドバー

目次

機械学習とは

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

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

初めてのKeras2.0

初めてのTensorflow(YouTube)

初めてのChainer2.0

初めてのビットコイン

ビットコイン用語集

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

初めての医療統計

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

初めてのEZRで医療統計

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

初めてのImageJで画像解析

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

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

Ionicのためのjavascript tips

その他

NiftyCloudMobileBackend

税金など

Dokuwiki

sidebar

ggplot2で論文用の白黒折れ線グラフ

ggplot2で論文用の白黒折れ線グラフ

初めての医療統計 目次

ggplot2(tidyverse)では、カラーのきれいなグラフを出力してくれるのはありがたいのですが、論文用には白黒のグラフを作成したい場合が多いです。

基本的には、ggplot()+theme_set(theme_classic())を用いるのですが、具体的な方法を記載させていただきたいと思います。

ソースコード

開発環境

https://rstudio.cloud/

2018年8月現在、メールアドレスを登録するのみで、無料です。

RStudio Cloudのconsole画面(画面左下)で、install.packages(“tidyverse”)を入力して、tidyverseパッケージをインストールした状態とします。

インストール終了後の画面

参考:http://twosquirrel.mints.ne.jp/?p=26918

Rmdファイルの新規作成と保存

File > New File > R Notebook で、R Notebookファイルを新規作成。

以下のようにR Notebookファイルが作成されるので、

1.グラフ作成用に平均と標準偏差を計算

ggplot2()でグラフを記載する前に、データを整理する必要があります。

dplyr(tidyverse)の

  1. group_by()関数
  2. summarise()関数

を用いて、グループごとに、個数、平均、標準偏差を計算して新しい表を作成します。

library(tidyverse)

head(ToothGrowth)
str(ToothGrowth)

d <- ToothGrowth %>%
  group_by(supp, dose) %>%
  summarise(
    n=n(), 
    mean_len=mean(len), 
    sd_len=sd(len)
  )
  # 蛇足だが、以下の書き方はsdがNAになってしまうので注意
  # https://dplyr.tidyverse.org/reference/summarise.html
  # summarise(n=n(), len=mean(len), sd=sd(len))
d 

pd <- position_dodge(0.1) # move them .05 to the left and right

ggplot(d, aes(x=dose, y=mean_len, shape=supp)) +
    theme_set(theme_classic()) +
    geom_point(size=4, position=pd) +
    geom_errorbar(aes(ymin=mean_len-sd_len, ymax=mean_len+sd_len), width=.1, position=pd) +
    geom_line(aes(linetype = supp), position=pd)

2.白黒の折れ線グラフの作成

上記で作成した表dを用いて、ggplot()関数でグラフを描きます。

pd <- position_dodge(0.1) # move them .05 to the left and right

ggplot(d, aes(x=dose, y=mean_len, shape=supp)) +
  theme_set(theme_classic()) +
  geom_point(size=4, position=pd) +
  geom_errorbar(aes(ymin=mean_len-sd_len, ymax=mean_len+sd_len), width=.1, position=pd) +
  geom_line(aes(linetype = supp), position=pd) +
  # グラフにタイトルをつける
  ggtitle("ToothGrowth") +
  theme(plot.title = element_text(hjust=0.5)) +
  theme(plot.title = element_text(size = 20),
    axis.title.x = element_text(size= 20),
    axis.title.y = element_text(size= 20),
    axis.text.x = element_text(size= 20),
    axis.text.y = element_text(size= 20)
  ) +
  # y軸のラベルの書き換え
  labs(y="Length")

以下のようなグラフが出力されます。

3.グラフをpngファイルで出力

以下のように、ggsave()関数で、グラフをpngファイルで出力することができます。

グラフを出力する方法としては、RmdファイルをKnit(htmlファイルなどに変換すること)してから、htmlファイル上の画像を右クリックして保存することでも、保存することができます。

library(tidyverse)

p0 = ggplot(mpg, aes(x = displ, y = cty))
p1 = p0 + geom_point()
p2 = p1 + theme_classic(base_size = 20, base_family = "Helvetica")
p3 = p2 + stat_smooth(method = lm, formula = y ~ log(x))

ggsave("mpg-displ-cty.png", p3, width = 4, height = 4, dpi=300)

Rmdファイルと同じフォルダに、以下のようなgraph.pngが保存されます。

エラーバーを片方だけにつける

下記リンク先によりますと、

1. geom_errorbar()でwidth=0のエラーバーを作成
2. geom_segment()で片方だけエラーバーの横線を追加

という流れになります。

geom_segment()でエラーバーのxの始点と終点を指定するときに、

横軸が数字であれば、as.numeric(key)-0.1のように指定する

横軸が文字(00pre, 1month, 2month, 3monthなど)であれば、
keyを0,1,2,3などに置き換えてから(csvファイルを修正しておいてもよいかもしれません)、
as.numeric()で数値に変更しておく。

ところが少し難しいポイントとなります。

pd <- position_dodge(0.1) # move them .05 to the left and right

ggplot(xc, aes(x=key, y=value, shape=DM, group = DM)) +
    theme_set(theme_classic()) +
    geom_point(size=4) +
    #errorbar without caps
    geom_errorbar(data=with(xc,xc[which(DM=='D'),]),
            aes(ymin = value, ymax = value+se),width=0) +
    geom_errorbar(data=with(xc,xc[which(DM=='N'),]),
            aes(ymin = value-se, ymax = value),width=0) +
    geom_line(aes(linetype = DM), position=pd) +
    #geom_segment for caps
    geom_segment(data=with(xc,xc[which(DM=='D'),]),
            aes(y=value+se,yend=value+se,x= as.numeric(substr(key, 7, 7))-0.1,xend= as.numeric(substr(key, 7, 7))+0.1)) +
    geom_segment(data=with(xc,xc[which(DM=='N'),]),
            aes(y=value-se,yend=value-se,x= as.numeric(substr(key, 7, 7))-0.1,xend= as.numeric(substr(key, 7, 7))+0.1)) +
    ylim(230, 300) +
    ggtitle("Figure 3") +
    theme(plot.title = element_text(hjust = 0.5))

https://stackoverflow.com/questions/44194700/selecting-direction-of-multiple-error-bars-in-a-line-plot

グラフのtitleを真ん中上に記載

library(tidyverse)

tg <- ToothGrowth
tgc <- summarySE(tg, measurevar="len", groupvars=c("supp","dose"))

ggplot(tgc, aes(x=dose, y=len, shape=supp)) +
    theme_set(theme_classic()) +

    ylim(0, 40) +
    
    ggtitle("Figure 3") +
    theme(plot.title = element_text(hjust = 0.5))

リンク

リンク(英語)

リンク

目次:初めての医療統計 目次

前:

次:

ggplot2で論文用の白黒折れ線グラフ.txt · 最終更新: 2020/08/12 by adash333