【问题标题】:Control font thickness without changing font size在不改变字体大小的情况下控制字体粗细
【发布时间】:2011-12-05 18:42:16
【问题描述】:

我正在寻找一种方法来控制在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 帮助页面似乎没有针对此的特定设置。有人有什么想法吗?

注意在ggplot2 中更改size 也不会产生我想要的效果,上次我检查过。

【问题讨论】:

    标签: r fonts plot ggplot2 font-size


    【解决方案1】:

    您可以尝试添加多个版本的文本,以圆形图案略微移动,


    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 的档案中潜藏着一个使用基本图形的版本,这就是它的灵感来源。

    【讨论】:

    • 哇。还是我应该说“是的!”?
    • 不错,,,但如果你使用矢量图形,我不推荐这种方式。对于光栅图形,它实际上非常好。
    • 基本图形版本现在可能是shadowtextTeachingDemos 包中
    【解决方案2】:

    另一个使用临时 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"))
    

    我想类似的事情可以用一个临时的光栅图形文件来完成,被一些图像处理算法模糊并在文本下方显示为光栅。

    【讨论】:

      【解决方案3】:

      你可以试试:

      text(...,"FONT", vfont = c('serif','bold'))
      

      虽然我不确定你会怎么做第三版的 FONT。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-20
        • 2014-10-07
        • 2012-07-12
        • 2021-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        相关资源
        最近更新 更多