r - Spiral Wrapped Text -
i saw in latex people wrapping text spiral seen below. replicate in r.
i though plotrix's arctext
given enough text seems make circle seen in plot (left) below. can make aspiral line seen in plot (right) can not merge text , spiral.
code
txt <- paste(rep("bendy spaghetti", 10), collapse=" ") txt2 <- paste(rep("bendy spaghetti", 20), collapse=" ") par(mfrow=c(1, 2), mar=rep(.3, 4)+c(0, 0, 1, 0)) library(plotrix) plot.new() plot.window(xlim = c(1, 5), ylim = c(2, 4), asp = 1) arctext(txt, center = c(3, 3), radius = 1.7, start = 4 * pi / 3, cex = .75, clockwise = false) title(main = "arc text (plotrix)") theta <- seq(0, 30 * 2 * pi, = 2 * pi/72) x <- cos(theta) y <- sin(theta) r <- theta/max(theta) plot.new() plot.window(xlim = c(-1, 1), ylim = c(-1, 1), asp = 1) lines(x * r, y * r) title(main = "a spiral")
ideally, solution work on n length text, txt
, txt2
above both make wrapping spiral not same size (txt2
double length of txt
).
approaches grid/ggplot2 , base grapgics welcomed.
not perfect
txt <- paste(rep("bendy spaghetti", 10), collapse=" ") txt2 <- paste(rep("bendy spaghetti", 20), collapse=" ") tt <- strsplit(txt, '')[[1]] xx <- 5 par(mfrow = c(1,2), mar = c(0,0,0,0)) plot(-xx:xx, -xx:xx, type = 'n', axes = false, ann = false) ## option 1 r <- rev(seq(0, xx, length.out = length(tt))) x <- sqrt(r) * cos(2 * pi * r) y <- sqrt(r) * sin(2 * pi * r) text(x, y, tt) ## option 2 plot(-xx:xx, -xx:xx, type = 'n', axes = false, ann = false) srt <- atan2(y, x) * 180 / pi (ii in seq_along(tt)) text(x[ii], y[ii], tt[ii], srt = srt[ii] - 90)
obviously, distance between letters shrinks closer center, can improved.
also don't see how can around calling text
each new value of srt
using approach since srt
isn't formal argument meaning couldn't vectorize(text.default, vectorize.args = 'srt')
, isn't slow example data.
additionally, make data frame , plug ggplot
.
dd <- data.frame(x, y, srt = srt - 90, tt) library('ggplot2') ggplot(dd, aes(x, y)) + geom_text(label = dd$tt, size = 5) ggplot(dd, aes(x, y)) + geom_text(label = dd$tt, size = 5, angle = dd$srt)
Comments
Post a Comment