2011-10-12 59 views
7

Karakterlerin boyutlarının değişmesine gerek kalmadan R ile işaretlenmiş metnin çizgi kalınlığını kontrol etmenin bir yolunu arıyorum. İşte (R kullanarak değil) bir örnek:Yazı tipi boyutunu değiştirmeden yazı tipi kalınlığını kontrol etme

varying font weights

orta kelime iki kere üst bir kalınlığa sahiptir, ancak boyutları aynı (yani hiçbir ölçeklendirme oldu) bulunmaktadır. Alt kelime aslında iki kelimedir: Renk ayrımı yaratmak için yoğun bir beyaz kelimenin üzerinde kırmızı bir kelime vardır (özellikle yoğun bir arsa notu için yararlıdır). vererek

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() 

:

replicating in R

Yani etkisi font-değişen yüzü aynıdır İşte

komut dizisidir yukarıdaki şekle denemek ve çoğaltmak için birlikte attı bulunuyor cesurca, ancak boyut farkı, üstesinden gelindiğinde farkedilebilecek kadar büyük değildir. par yardım sayfasının bunun için belirli bir ayarı görünmüyor. Herhangi bir fikri olan var mı?

ggplot2'daki size no'lu adres değişikliği, ya da son kez kontrol ettiğim efekti üretmiyor. Sen deneyebilirsiniz

cevap

0

:

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

Sana FONT üçüncü versiyonunu yapacağını emin değilim rağmen.

9
Sen hafifçe dairesel bir şekilde kaydırılmış metnin birden çok sürümünü ekleyerek deneyebilirsiniz

,

yeah


R-yardım arşivlerinde gizlenen baz grafikleri kullanarak bir sürümü var
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)) 

, bundan ilham alındı.

+0

Vay. Yoksa "Evet!" Demeliyim? – joran

+0

güzel ,,, ama vektör grafikleri kullanıyorsanız, bu şekilde önermiyorum. Raster grafikler için aslında çok güzel. – kohske

+0

Teşekkürler, ama aslında "F ** k evet!" Olmalıdır. Bu çözümün çok fazla kod gerektirmesi garip görünüyor mu? Başka bir deyişle, bunu yapmak için grafik ayarlarına şaşırmadım. –

3

geçici postscript dosyası kullanarak başka bir seçenek, grImport bir şekle

enter image description here

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")) 

bazı görüntü işleme ile bulanık geçici raster grafik dosya ile yapılabilirdi benzer bir şey, hayal dönüştürülen algoritma ve metnin altında raster olarak görüntülenir.

İlgili konular