2011-10-12 5 views
7

문자의 치수가 변경되지 않고 R에 그려지는 텍스트의 선 두께를 제어하는 ​​방법을 찾고 있습니다. 여기서 (R를 사용하지 않는) 예입니다글꼴 크기를 변경하지 않고 글꼴 두께를 조절하십시오.

varying font weights

중간 단어 배 가기의 두께를 가지며, 또 치수가 동일한 (매우 스케일링 일어나지)이다. 하단 단어는 실제로 두 단어입니다. 빨간색 단어가 짙은 흰색 단어 위에 겹쳐서 색 분리를 만듭니다 (특히 바쁜 그림에 주석을 달 때 유용합니다). 제공

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

그래서 효과가 글꼴 얼굴을 변경하는 것과 동일 여기

는 일련의 명령은 내가 위의 그림을 시도하고 복제하기 위해 함께 던졌다이다 굵은 글씨로 나타내지 만, 크기 차이는 중첩 될 때 눈에 띄기에는 충분하지 않습니다. par 도움말 페이지가 이에 대한 특정 설정을 가지고 있지 않습니다. 누구든지 아이디어가 있습니까?

ggplot2으로 변경해도 마지막으로 확인한 결과가 나타나지 않습니다. 당신은 시도 할 수

답변

0

:

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

난 당신이 글꼴의 세 번째 버전을 할 거라고 어떻게 확신하지 않지만.

9
당신은 약간 원형 패턴으로 이동 텍스트의 여러 버전을 추가하는 시도 할 수

,

yeah


R-도움 보관소에 숨어 기본 그래픽을 사용하여 버전이있다
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)) 

, 이로부터 영감을 얻었습니다.

+0

와우. 아니면 "그래!"라고 말해야합니까? – joran

+0

멋진 ,,,하지만 당신이 벡터 그래픽을 사용하는 경우이 방법을 권장하지 않습니다. 래스터 그래픽의 경우 실제로 매우 좋습니다. – kohske

+0

고마워,하지만 실제로는 "F ** k yeah!"여야합니다. 이 솔루션이 너무 많은 추가 코드를 필요로한다는 것이 이상하게 보입니까? 다른 말로하면, 이렇게하기위한 그래픽 설정이 없다는 것에 놀랐습니다. –

3

임시 포스트 스크립트 파일을 사용하여 또 다른 옵션은, 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")) 

내가 어떤 이미지 처리에 의해 흐리게 임시 래스터 그래픽 파일을 함께 할 수있는 비슷한 상상을 변환 알고리즘을 사용하고 텍스트 아래에 래스터로 표시됩니다.

관련 문제