螺旋包裹的文本

Tyl*_*ker 6 plot r

我在LaTeX中看到人们将文本包装成螺旋状,如下所示.我想在R中复制这个.

在此输入图像描述

我虽然plotrixarctext会做,但只要有足够的文字,似乎作一圆为下文图(左)看到.我可以制作aspiral line,如图(右)所示,但不能合并文本和螺旋.

在此输入图像描述

txt <- paste(rep("bendy like spaghetti", 10), collapse=" ")
txt2 <- paste(rep("bendy like 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, by = 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")
Run Code Online (Sandbox Code Playgroud)

理想情况下,该解决方案将工作于n个长度为文本,所以txttxt2上述既能使包裹螺旋但不相同的尺寸(txt2是的两倍长度txt).

欢迎使用grid/ggplot2和base grapgics的方法.

raw*_*awr 4

不完美但是

txt <- paste(rep("bendy like spaghetti", 10), collapse=" ")
txt2 <- paste(rep("bendy like 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
for (ii in seq_along(tt))
  text(x[ii], y[ii], tt[ii], srt = srt[ii] - 90)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

显然,越靠近中心,字母之间的距离就越小,因此可以改进。

另外,我不知道如何绕过调用使用此方法text的每个新值,因为这不是一个正式的参数,意味着您不能,但这对于示例数据来说并不是很慢。srtsrtVectorize(text.default, vectorize.args = 'srt')

此外,您可以只制作数据框并将其插入到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)
Run Code Online (Sandbox Code Playgroud)