将图保存为EMF文件

时间:2017-12-27 20:09:29

标签: r plot

我遇到emf()包中devEMF函数的问题。

我正在使用的代码 -

library(devEMF)
emf(file = "trial.emf")
plot(1:10, seq(10, 100, 10), type = "l", xlab = "Time", ylab = "Distance")
#sample plot
dev.off()

Output

这没有绘图线,但确实包含其他所有内容(标签,轴刻度,标题)。

Desired_Output

我错过了一些图形包吗?

sessionInfo()
#R version 3.3.2 (2016-10-31)
#Platform: x86_64-w64-mingw32/x64 (64-bit)
#Running under: Windows 7 x64 (build 7601) Service Pack 1

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

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

#other attached packages:
#[1] devEMF_3.6

#loaded via a namespace (and not attached):
#[1] tools_3.3.2

2 个答案:

答案 0 :(得分:2)

如果您尝试在LibreOffice外部查看,该函数中的某些默认值并不理想。

试试这个:

library(devEMF)
emf(file = "trial.emf", emfPlus = FALSE)
plot(1:10, seq(10, 100, 10), type = "l", xlab = "Time", ylab = "Distance")
dev.off()

确保emfPlus = FALSE。如果你在LibreOffice中查看由emfPlus = TRUE生成的图,你会发现它看起来很好。与其他观看者合作时使用emfPlus = FALSE

答案 1 :(得分:1)

用于查看生成的emf图形的程序很可能不支持EMF +记录。

如JMT2080AD的答案所述,devEMF库可以生成“EMF”或“EMF +”文件。较新的EMF +格式(https://msdn.microsoft.com/en-us/library/cc230724.aspx)自2007年以来一直存在,并且受到最近的闭源程序(即Office 2010)的支持,但旧程序(例如旧版Adobe Illustrator)缺少支持而且参差不齐在许多开源程序中(例如,LibreOffice,Inkscape)。

无论好坏,EMF +记录都嵌入在EMF评论记录中,这意味着旧程序会默默地忽略它们。

我发现devEMF默认值为Microsoft Office 2010和LibreOffice> 5.1.6生成可接受的文件。虽然LibreOffice对EMF +的支持不完整,但默认情况下在emf()的调用中会关闭不受支持的功能。也就是说,JMT2080AD建议在emfPlus = FALSE的调用中设置emf()可能会使更多程序可以查看文件(代价是丢失透明度和抗锯齿等功能)。

(披露:我是devEMF包的作者)