2011-10-12 29 views
7

Poszukuję sposobu kontrolowania grubości linii tekstu wydrukowanego w R bez zmiany wymiarów znaków. Oto przykład (nie używając R):Kontroluj grubość czcionki bez zmiany rozmiaru czcionki

varying font weights

środkowe słowo ma grubość dwukrotnie górze, ale wymiary są takie same (bez skalowania tak się stało). Dolne słowo to w rzeczywistości dwa słowa: czerwone słowo nakładane na ciężkie białe słowo, aby utworzyć separację kolorów (szczególnie przydatne przy opisywaniu zajęty wątek).

Oto zestaw poleceń wrzuciłem razem spróbować powtórzyć powyższy rysunek:

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

podając:

replicating in R

Więc efekt jest taki sam, jak zmienia font-face pogrubione, ale różnica w wielkości nie jest wystarczająco duża, aby można je było zauważyć po oblężeniu. Wygląda na to, że strona pomocy par nie ma określonego ustawienia. Ktoś ma jakieś pomysły?

Zmiana noty size w ggplot2 nie daje efektu, którego chcę, również ostatnio sprawdzałem.

Odpowiedz

0

Można spróbować:

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

Chociaż nie jestem pewien, w jaki sposób chcesz zrobić trzecią wersję czcionki.

9

Można spróbować dodać różne wersje tekstu nieznacznie przesunięty w kole,

yeah


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

Jest to wersja z wykorzystaniem grafiki bazowe ukryte w archiwach R-pomoc z którego to jest inspirowane.

+0

Wow. A może powinienem powiedzieć "tak!"? – joran

+0

nice ,,, ale nie polecam w ten sposób, jeśli używasz grafiki wektorowej. W przypadku grafiki rastrowej jest to bardzo ładne. – kohske

+0

Dzięki, ale tak naprawdę powinno być "F ** k yeah!". Czy to dziwne, że to rozwiązanie wymaga tak dużo dodatkowego kodu? Innymi słowy, byłem zaskoczony, że nie ma ustawień graficznych, aby to zrobić. –

3

Inną opcją używając tymczasowy plik PostScript konwertowane do kształtu przez grImport,

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

mogę sobie wyobrazić coś podobnego można zrobić z tymczasowym rastrowej pliku graficznego, zamazany przez jakiś przetwarzania obrazu algorytm i wyświetlane jako raster pod tekstem.

Powiązane problemy