我正在寻找一种方法来控制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
不会产生我想要的效果,上次检查时。
答案 0 :(得分:11)
您可以尝试添加以圆形图案轻微移位的文本的多个版本,
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的档案中,从中受到启发。
答案 1 :(得分:3)
使用临时postscript文件的另一个选项,转换为grImport
的形状,
library(grImport)
cat("%!PS
/Times-Roman findfont
100 scalefont
setfont
newpath
0 0 moveto
(hello) show", file="hello.ps")
PostScriptTrace("hello.ps", "hello.xml")
hello <- readPicture("hello.xml")
grid.rect(gp=gpar(fill="grey"))
grid.picture(hello,use.gc = FALSE, gp=gpar(fill="red", lwd=8, col="white"))
我想可以使用临时栅格图形文件完成类似的操作,通过某些图像处理算法模糊并在文本下方显示为光栅。
答案 2 :(得分:0)
你可以尝试:
text(...,"FONT", vfont = c('serif','bold'))
虽然我不确定你是如何做第三版的FONT。