2011-10-12 13 views
7

文字の寸法を変更せずに、Rにプロットされたテキストの線の太さを制御する方法を探しています。ここで(Rを使用していない)例を示します。フォントサイズを変更せずにフォントの太さを制御する

varying font weights

真ん中の言葉は二回トップの厚さを有し、まだ寸法が同じ(ようにスケーリングが起こっていない)です。一番下の単語は、実際には2つの単語です:色の分離を作成するために、重い白い単語に重なる赤い単語(特に、忙しいプロットに注釈するのに便利です)。

ここで私は上の図を試してみて、複製するために一緒に投げたコマンドのセットです:だから効果がフォントフェースを変更すると同じです

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

は、太字にしますが、大きさの差は重なり合うときに目立つほど大きくはありません。 parヘルプページにはこれに関する特定の設定がありません。誰にでもアイデアはありますか?

ggplot2に変更しても、前回チェックしたときにも効果がありません。あなたが試みることができる

答えて

0

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

私はあなたがFONTの3番目のバージョンにしてくださいかどうかはわかりませんが。

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

私は似たような想像は、いくつかの画像処理によってぼやけて、一時的なラスタグラフィックファイルで行うことができますアルゴリズムを使用し、テキストの下にラスターとして表示されます。

関連する問題