I am plotting multiple graphs in baseR and I am trying to plot a text in the lower rightern corner of my plots. I tried using mtext()
but this doesn't give me the desired result. How would you do this? The idea in the end is to generate something like the graphic below. How could I do this?
Here is my code I use to generate the plots.
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)))
With mtext()
you can put your text at plot margin. In your case, you can try playing with parameters line
and at
. See help(mtext)
plot(1:10,10:1)
mtext('text is here', side=1, line=3.5, at=9)
plot(1:10,10:1)
text(c(0,6,9), -0.6, paste('hello world', c(1:3)), xpd=NA)
With the text()
function you can take reference for positioning to the coordinates of your plot and you can plot several text elements at ones.
The xpd
parameter allows you to choose between three possibilities where you want to plot your element (also available for other elements like points and lines):
FALSE
: only inside the plotTRUE
: in the outer plotting areaNA
: everywhere on your plotting deviceplot(1)
title(sub="hallo", adj=1, line=3, font=2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With