我正在寻找一种方法来控制 R
中绘制的文本的线条粗细没有改变字符的尺寸。这是一个示例(不使用 R
):
中间字的厚度是顶部的两倍,但尺寸相同(因此没有发生缩放)。最下面的字实际上是两个字:一个红色的字叠加在一个沉重的白色字上,以创建分色(对于注释繁忙的情节特别有用)。
这是我拼凑起来的一组命令来尝试复制上图:
png("font.png",width=1.02, height=1.02, units="in", res=150)
par(ps=10, font=1, bg="light gray", col="black", mai=rep(0.02,4), pin=c(1,1))
plot.new()
box()
text(0.5,0.85,"FONT",cex=1)
text(0.5,0.6,"FONT",cex=2)
text(0.5,0.3,"FONT",cex=2,col="white")
text(0.5,0.3,"FONT",cex=1,col="red")
text(0.5,0.1,"FONT",cex=1, font=2, col="white")
text(0.5,0.1,"FONT",cex=1, font=1, col="red")
dev.off()
给予:
所以效果和把 font-face 改成粗体是一样的,只是大小的差别不大,叠加的时候不明显。
par
帮助页面似乎没有对此进行特定设置。谁有想法?注意更改
size
在 ggplot2
也没有产生我想要的效果,上次我检查过。
最佳答案
您可以尝试添加以圆形图案稍微移动的文本的多个版本,
library(grid)
stextGrob <- function (label, r=0.02, x = unit(0.5, "npc"), y = unit(0.5, "npc"),
just = "centre", hjust = NULL, vjust = NULL, rot = 0, check.overlap = FALSE,
default.units = "npc", name = NULL, gp = gpar(), vp = NULL){
let <- textGrob("a", gp=gp, vp=vp)
wlet <- grobWidth(let)
hlet <- grobHeight(let)
tg <- textGrob(label=label, x=x, y=y, gp=gpar(col="red"),
just = just, hjust = hjust, vjust = vjust, rot = rot,
check.overlap = check.overlap,
default.units = default.units)
tgl <- c(lapply(seq(0, 2*pi, length=36), function(theta){
textGrob(label=label,x=x+cos(theta)*r*wlet,
y=y+sin(theta)*r*hlet, gp=gpar(col="white"),
just = just, hjust = hjust, vjust = vjust, rot = rot,
check.overlap = check.overlap,
default.units = default.units)
}), list(tg))
g <- gTree(children=do.call(gList, tgl), vp=vp, name=name, gp=gp)
}
grid.stext <- function(...){
g <- stextGrob(...)
grid.draw(g)
invisible(g)
}
grid.newpage()
grid.rect(gp=gpar(fill="grey"))
grid.stext("Yeah", gp=gpar(cex=4))
有一个使用潜伏在 R-help 文件中的基本图形的版本,它的灵感来自于此。
关于r - 在不改变字体大小的情况下控制字体粗细,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734535/