1. ホーム
  2. r

[解決済み] R: プロットエリア外の右下隅にプロットにテキストを追加

2022-02-07 14:45:32

質問

baseRで複数のグラフをプロットしているのですが、プロットの右下隅にテキストをプロットしようと思っています。そこで mtext() が、これでは期待した結果が得られません。皆さんならどうされますか?最終的には、下の図のようなものを生成することを考えています。どうすればいいのでしょうか?

以下は、プロットを生成するために使用する私のコードです。

xy <- data.frame(NAME=c("NAME1", "NAME1","NAME1","NAME1","NAME2","NAME2","NAME2"),ID=c(47,47,47,47,259,259,259),YEAR=c(1932,1942,1965,1989,2007,2008,2014),VALUE=c(0,NA,-6,-16,0,-9,-28), test=c("text1","text1","text1","text1","text2","text2","text2"))

# split data by index 
ind <- split(x = xy,f = xy[,'ID'])

plot1 <- function(x) {
  fname <- paste0(x[1, 'ID'], '.png')
  png(fname, width=1679, height=1165, res=150)
  par(mar=c(6,8,6,5))
  plot(x = c(1946, 2014),
       y = range(x$VALUE, na.rm=TRUE),
       type='n',
       main=x[1, 'NAME'],
       xlab="Time [Years]",
       ylab="Value [m]")
  axis(2, at = seq(-100000, 100000, 100), cex.axis=1, labels=FALSE, tcl=-0.3)
  points(x[,c('YEAR','VALUE')], type="l", lwd=2)
  points(x[,c('YEAR','VALUE')], type="p", lwd=1, cex=0.5, pch=21, bg='white')
  abline(h=0)
  mtext(x$test, side=1, )

  dev.off()
}

plot2 <- function(x) {
  fname <- paste0(x[1, 'ID'], '.png')
  png(fname, width=1679, height=1165, res=150)    
  par(mar=c(6,8,6,5))
  plot(x[,c('YEAR','VALUE')],
       type='n',
       main=x[1, 'NAME'],
       xlab="Time [Years]",
       ylab="value [m]")
  axis(2, at = seq(-100000, 100000, 100), cex.axis=1, labels=FALSE, tcl=-0.3)
  points(x[,c('YEAR','VALUE')], type="l", lwd=2)
  points(x[,c('YEAR','VALUE')], type="p", lwd=1, cex=0.5, pch=21, bg='white')
  abline(h=0)
  mtext(x$test, side=1)
  dev.off() 
}

lapply(ind, function(x) ifelse(any(x$YEAR < 1946 & x$YEAR < 2014), plot2(x), plot1(x)))

解決方法は?

plot(1)
title(sub="hallo", adj=1, line=3, font=2)