ユーザ用ツール

サイト用ツール


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

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン両方とも次のリビジョン
ggplot2で論文用の白黒折れ線グラフ [2018/08/10] – [リンク] adash333ggplot2で論文用の白黒折れ線グラフ [2020/08/12] – [2.白黒の折れ線グラフの作成] adash333
行 5: 行 5:
 基本的には、<wrap em>ggplot()+theme_set(theme_classic())</wrap>を用いるのですが、具体的な方法を記載させていただきたいと思います。 基本的には、<wrap em>ggplot()+theme_set(theme_classic())</wrap>を用いるのですが、具体的な方法を記載させていただきたいと思います。
  
-===== 見出し ===== +===== ソースコード =====
-作成中+
  
 +https://colab.research.google.com/drive/1yPHODB6sgUU9OJx48tEibAF9rnUHDv-s?usp=sharing
  
  
-サマリー作成用の関数の定義+ 
 + 
 + 
 + 
 +===== 開発環境 ===== 
 +https://rstudio.cloud/ 
 + 
 +2018年8月現在、メルアドレスを登録するのみで、無料です。 
 + 
 +[[https://rstudio.cloud/|RStudio Cloud]]のconsole画面(画面左下)で、<wrap hi><wrap em>install.packages("tidyverse")</wrap></wrap>を入力して、tidyverseパッケージをインストールした状態とします。 
 + 
 +{{:pasted:20180813-231913.png}} 
 + 
 +インストール終了後の画面 
 + 
 +{{:pasted:20180813-232101.png}} 
 + 
 +参考:http://twosquirrel.mints.ne.jp/?p=26918 
 + 
 +===== Rmdファイルの新規作成と保存 ===== 
 +File > New File > R Notebook で、R Notebookファイルを新規作成。 
 + 
 +{{:pasted:20180813-232234.png}} 
 + 
 +{{:pasted:20180813-232303.png}} 
 + 
 +以下のようにR Notebookファイルが作成されるので、 
 + 
 + 
 + 
 +===== 1.グラフ作成用に平均と標準偏差を計算 ===== 
 +ggplot2()でグラフを記載する前に、データを整理する必要があります。 
 + 
 +dplyr(tidyverse) 
 +  -<wrap hi>group_by()関数</wrap> と 
 +  -<wrap hi>summarise()関数</wrap> 
 +を用いて、グループごとに、個数、平均、標準偏差を計算して新しい表を作成します。 
 <code> <code>
-summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE, +library(tidyverse)
-                      conf.interval=.95, .drop=TRUE) { +
-    library(plyr)+
  
-    # New version of length which can handle NA's: if na.rm==T, don't count them +head(ToothGrowth
-    length2 <- function (x, na.rm=FALSE{ +str(ToothGrowth)
-        if (na.rmsum(!is.na(x)) +
-        else       length(x) +
-    }+
  
-    # This does the summary. For each group's data framereturn a vector with +d <- ToothGrowth %>% 
-    # Nmean, and sd +  group_by(suppdose) %>% 
-    datac <- ddply(data, groupvars, .drop=.drop+  summarise( 
-      .fun function(xx, col{ +    n=n(),  
-        c(N    length2(xx[[col]], na.rm=na.rm), +    mean_len=mean(len),  
-          mean = mean   (xx[[col]], na.rm=na.rm), +    sd_len=sd(len
-          sd   = sd     (xx[[col]], na.rm=na.rm) +  ) 
-        +  # 蛇足だが、以下の書き方はsdがNAになってしまうので注意 
-      }, +  # https://dplyr.tidyverse.org/reference/summarise.html 
-      measurevar +  # summarise(n=n(), len=mean(len), sd=sd(len)) 
-    )+
  
-    # Rename the "mean" column     +pd <- position_dodge(0.1# move them .05 to the left and right
-    datac <- rename(datac, c("mean" = measurevar))+
  
-    datac$se <datac$sd / sqrt(datac$N # Calculate standard error of the mean+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) 
 +</code>
  
-    # Confidence interval multiplier for standard error +===== 2.白黒の折れ線グラフの作成 ===== 
-    Calculate t-statistic for confidence interval:  + 
-    e.g., if conf.interval is .95use .975 (above/below), and use df=N-1 +上記で作成した表dを用いて、ggplot()関数でグラフを描きます。 
-    ciMult <- qt(conf.interval/2 + .5datac$N-1) + 
-    datac$ci <- datac$se * ciMult+<code> 
 +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"
 +</code> 
 + 
 +以下のようなグラフが出力されます。 
 + 
 +{{ :ダウンロード.png |}} 
 + 
 + 
 +===== 3.グラフをpngファイルで出力 ===== 
 + 
 +以下のように、ggsave()関数で、グラフをpngファイルで出力することができます。 
 + 
 +グラフを出力する方法としては、RmdファイルをKnit(htmlファイルなどに変換すること)してから、htmlファイル上の画像を右クリックして保存することでも、保存することができます。 
 + 
 +<code> 
 +library(tidyverse) 
 + 
 +p0 = ggplot(mpgaes(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) 
 +</code> 
 +Rmdファイルと同じフォルダに、以下のようなgraph.pngが保存されます。 
 + 
 +{{:pasted:20180811-054708.png}} 
 + 
 +===== エラーバーを片方だけにつける ===== 
 +下記リンク先によりますと、 
 +<code> 
 +1. geom_errorbar()でwidth=0のエラーバーを作成 
 +2geom_segment()で片方だけエラーバーの横線を追加 
 +</code> 
 +という流れになります。 
 + 
 +geom_segment()でエラーバーのxの始点と終点を指定するときに、 
 +<code> 
 +横軸が数字であれば、as.numeric(key)-0.1のように指定する 
 + 
 +横軸が文字(00pre, 1month, 2month, 3monthなど)であれば、 
 +keyを0,1,2,3などに置き換えてから(csvファイルを修正しておいてもよいかもしれません)、 
 +as.numeric()で数値に変更しておく。 
 +</code> 
 + 
 +ところが少し難しいポイントとなります。 
 + 
 + 
 +<code> 
 + 
 +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(key7, 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)) 
 + 
 +</code> 
 + 
 + 
 + 
 + 
 +https://stackoverflow.com/questions/44194700/selecting-direction-of-multiple-error-bars-in-a-line-plot 
 + 
 +===== グラフのtitleを真ん中上に記載 ===== 
 + 
 + 
 + 
 +<code> 
 +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))
  
-    return(datac) 
-} 
 </code> </code>
 ===== リンク ===== ===== リンク =====
 +
 +
 +
 +https://heavywatal.github.io/rstats/ggplot2.html
 +
 +
 +
 +===== リンク(英語) =====
  
 https://mrunadon.github.io/ThesisPlot/ https://mrunadon.github.io/ThesisPlot/
行 64: 行 217:
 https://www.safaribooksonline.com/library/view/r-graphics-cookbook/9781449363086/ch04.html https://www.safaribooksonline.com/library/view/r-graphics-cookbook/9781449363086/ch04.html
  
 +===== リンク =====
 +目次:[[初めての医療統計:index.html|初めての医療統計 目次]]
 +
 +前:
 +
 +次:
  
  
  

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki