我想在单色图形中的一条线上绘制标签.所以我需要在标签的每个字母上留下小的白色边框.
文本标签的矩形边框或背景无用,因为隐藏了大量绘制的数据.
有没有办法在R图中的文本标签周围放置边框,阴影或缓冲区?
编辑:
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", …Run Code Online (Sandbox Code Playgroud) 我有一个图(用 R 制作ggplot2),它是一堆文本数据的奇异值分解的结果,所以我基本上有一个数据集,其中包含一些评论中使用的约 100 个单词和约 10 个评论类别,具有 2D 坐标对于他们每个人来说。由于文本量太大以及许多重要点的距离有多近,我很难让情节看起来清晰。
我的数据现在的结构方式是,我geom_texts用不同的格式绘制两个不同的数据,并为每个数据传递一个单独的坐标数据框。这更容易,因为如果 ~10 个类别与 ~100 个术语重叠(这是次要的)就可以了,而且我想要这两个类别有相当不同的格式,但不一定有理由不能将它们放在一起数据框,geom我想是否有人能找到解决方案。
我想做的是使用该ggrepel功能,使 ~10 个类别相互排斥,并使用该shadowtext功能使它们从彩色单词的背景中脱颖而出,但由于它们不同,geom我不确定如何为了实现这一目标。
带有一些虚假数据的最小示例:
library(ggplot2)
library(ggrepel)
library(shadowtext)
dictionary <- c("spicy", "Thanksgiving", "carborator", "mixed", "cocktail", "stubborn",
"apple", "rancid", "table", "antiseptic", "sewing", "coffee", "tragic",
"nonsense", "stufing", "words", "bottle", "distillery", "green")
set.seed(1)
data.frame(
Dim1 = rnorm(100),
Dim2 = rnorm(100),
Term = sample(dictionary, 100, replace = TRUE),
Color = as.factor(sample.int(10, 100, replace = TRUE))
) -> words
data.frame( …Run Code Online (Sandbox Code Playgroud)