【R】有意差のあるデータポイントに記号をつける&時間軸が2本あるfigure

投稿者: | 2019-01-24

論文のfigureコードです。参考にしてください。
plotだけを使って、par(new=T)でラベルなしのグラフを上書きしまくっています。
ggplotを使ったほうがキレイに書けるかもしれませんが…
このグラフの変則的なところは以下です。

①:有意差のあるデータポイントにアスタリスク
このグラフの場合、有意に変化したデータ項目にはフラグ(data$label=1)をつけて、その箇所を指定して(data$label[i]>0の部分)、*(アスタリスク)を挿入しています。

②:x軸が2本
災害からの経過時間軸と、暦上の時間軸の2本を配置しています。

残っている課題はdpiで、dpiをなぜか指定できなかったのでこのまま出力するとdpi=72と論文投稿規定を満たさないfigureになるので、プレビューで解像度を上げて使用しました。

tiff(filename = "Figure 2.tiff", #filenameでファイル名を指定
     width = 1920, height = 1200, units = "px", #widthで幅、heightで高さのピクセルを指定
     pointsize = 30, #フォントサイズを指定
     bg = "white")

par(mar = c(8, 4, 2, 2), mgp=c(2.0, 0.7, 0))
plot(data$month[data$SEX=="Men"], data$freq[data$SEX=="Men"], type="l", ylim = c(0, 3.0), xaxp=c(0, 60, 5), lty = 1,
     xlab="Time from the Disaster (month)", ylab="Relative Risk of Mortality", tck = -0.02,
     col = gray(0.6), lwd = 2, ps = 30)
legend("topright", c("Men", "Women"), lty = c(1,1), col = c(gray(0.6), gray(0)), lwd = c(2,2), xjust = 1)
par(new=T)                                            # 上書き可にしてから
plot(data$month[data$SEX=="Women"], data$freq[data$SEX=="Women"], type="l", ylim = c(0, 3.0), xaxp=c(0, 60, 5), lty = 1,
     xlab="", ylab="", axes = FALSE, tck = -0.02,
     mar = c(8, 4, 2, 2), mgp=c(2.0, 0.7, 0),
     lwd = 2, ps = 30)
par(new=T) #x軸を追加する。
par(mar = c(8, 4, 2, 2), mgp=c(2.0, 0.7, 0)) #余白を広げておく)。
axis(1, line=4, #どのくらい軸を離すか(今回はグラフ領域内なのでマイナス)
     at = c(-2, 10, 22, 34, 46, 58), labels=c("2011", "2012", "2013", "2014", "2015", ""),
     mgp=c(2.0,0.7,0), tck = -0.02, lwd=4) 
mtext("Calendar Year", side = 1, line = 6)
par(new=T, mar = c(8, 4, 2, 2), mgp=c(2.0, 0.7, 0)) #アスタリスクを追記する。(Women)
for (i in 1:58) {
  if(data$label[i] > 0){
    text(i-1, data$freq[i], "*", cex = 2)
  }
}
par(new=T, mar = c(8, 4, 2, 2), mgp=c(2.0, 0.7, 0)) #アスタリスクを追記する。(Men)
for (i in 59:116) {
  if(data$label[i] > 0){
    text(i-59, data$freq[i], "*", cex = 2, col = gray(0.6))
  }
}


dev.off()

できたfigureが以下。使用された論文はこちら

Pocket

コメントを残す

メールアドレスが公開されることはありません。