I want to label a line in a monochrome image. Therefore, I need a small white frame on each letter of the label.
The border or background of the rectangle of the text label is useless because it hides a lot of data plotted on the graph.
Is there a way to put borders, shadows or buffers around text labels on R graphs?
EDIT:
shadowtext <- function(x, y=NULL, labels, col='white', bg='black', theta= seq(pi/4, 2*pi, length.out=8), r=0.1, ... ) { xy <- xy.coords(x,y) xo <- r*strwidth('x') yo <- r*strheight('x') for (i in theta) { text( xy$x + cos(i)*xo, xy$y + sin(i)*yo, labels, col=bg, ... ) } text(xy$x, xy$y, labels, col=col, ... ) } pdf(file="test.pdf", width=2, height=2); par(mar=c(0,0,0,0)+.1) plot(c(0,1), c(0,1), type="l", lwd=20, axes=FALSE, xlab="", ylab="") text(1/6, 1/6, "Test 1") text(2/6, 2/6, "Test 2", col="white") shadowtext(3/6, 3/6, "Test 3") shadowtext(4/6, 4/6, "Test 4", col="black", bg="white") shadowtext(5/6, 5/6, "Test 5", col="black", bg="white", theta = seq(pi/4, 2*pi, length.out=24)) dev.off()
The code above uses a solution from koekenbakker. This is good for PNG graphics, but I need a different approach for high resolution PDF.