2014-02-26 27 views
3

我一直在關注如何更改r圖形(base和ggplot2)中字體的Winston Chang's excellent tutorial,並且它一切正常只要我不包含任何半透明圖中的透明度。下面的兩個例子是相同的,除了第二個包含參數「col = alpha(」black「,0.5)」。然而,儘管第一個看起來很好並且可以完美縮放,但第二個看起來已經被保存爲光柵圖形(不能很好地縮放)。在半透明圖形中嵌入字體(PDF)

這個問題在使用時仍然存在。 knitr,但它甚至會導致與圖形相同頁面上的所有文本和圖形顯示爲柵格。

這個問題似乎與this question有點相關,但我沒有得到與該問題中的海報相同的問題,並且所提出的解決方案並未解決我的問題。

這工作(因爲沒有alpha):

library(extrafont) 
font_install("fontcm") 
loadfonts() 
library(scales) 

pdf("plot_cm.pdf", family="CM Roman", width=4, height=4.5) 
plot(1:10, 1:10, pch=16) 
dev.off() 

embed_fonts("plot_cm.pdf", outfile="plot_cm_embed.pdf") 

這不(因爲可能阿爾法):

library(extrafont) 
font_install("fontcm") 
loadfonts() 
library(scales) 

pdf("plot_cm.pdf", family="CM Roman", width=4, height=4.5) 
plot(1:10, 1:10, pch=16, col=alpha("black", 0.5)) 
dev.off() 

embed_fonts("plot_cm.pdf", outfile="plot_cm_embed.pdf") 

會議信息:

R version 3.0.2 (2013-09-25) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United Kingdom.1252  

attached base packages: 
[1] grDevices datasets splines graphics utils  grid  stats  methods base  

other attached packages: 
[1] extrafont_0.16   xtable_1.7-1   knitr_1.5    dplyr_0.1.1   
[5] directlabels_2013.6.15 quadprog_1.5-5   lubridate_1.3.3  scales_0.2.3   
[9] ggthemes_1.6.0   stringr_0.6.2   plyr_1.8    Hmisc_3.14-0   
[13] Formula_1.1-1   survival_2.37-7  lattice_0.20-24  ggplot2_0.9.3.1  
[17] reshape2_1.2.2   

loaded via a namespace (and not attached): 
[1] assertthat_0.1  cluster_1.14.4  colorspace_1.2-4 dichromat_2.0-0  digest_0.6.4  
[6] evaluate_0.5.1  extrafontdb_1.0  formatR_0.10  gtable_0.1.2  labeling_0.2  
[11] latticeExtra_0.6-26 MASS_7.3-29   memoise_0.1   munsell_0.4.2  proto_0.3-10  
[16] RColorBrewer_1.0-5 Rcpp_0.11.0   Rttf2pt1_1.2  tools_3.0.2 

回答

2

我不知道如何解決它與extrafont包,但你可能會嘗試showtext,另一個p ackage處理R圖形中的字體。

的代碼重現你的情節如下:使用showtext應該由extrafont非常類似於

# download font file 
old = setwd(tempdir()) 
download.file("http://downloads.sourceforge.net/project/cm-unicode/cm-unicode/0.7.0/cm-unicode-0.7.0-ttf.tar.xz", 
    "cm-unicode-0.7.0-ttf.tar.xz") 
untar("cm-unicode-0.7.0-ttf.tar.xz", compressed = "xz") 
setwd("cm-unicode-0.7.0") 

# register font to "showtext" package 
library(showtext) 
font.add("CM Roman", 
     regular = "cmunrm.ttf", 
     italic = "cmunti.ttf", 
     symbol = "cmunti.ttf") 
setwd(old) 

# create graphs -- enclose plotting codes by a pair of 
# showtext.begin()/showtext.end() 
library(scales) 
pdf("plot_cm.pdf", width=4, height=4.5) 
par(family = "CM Roman") 
showtext.begin() 

# your example 
plot(1:10, 1:10, pch=16, col=alpha("black", 0.5)) 

# example in Winston Chang's tutorial 
curve(dnorm, from=-3, to=3, main="Normal Distribution") 
text(x=0, y=0.1, cex=1.5, expression(italic(y == frac(1, sqrt(2 * pi)) * 
            e^{-frac(x^2, 2)}))) 

showtext.end() 
dev.off() 

圖表創建。你需要採取與showtext的步驟基本上是:

  1. 找到字體文件,無論是安裝在您的系統或從網上下載的。
  2. 將這些字體註冊到showtext
  3. 在一對showtext.begin()showtext.end()內運行繪圖功能。

希望這可以在一定程度上幫助你。