R效果图在屏幕上显示OK但生成的pdf不包含任何页面

时间:2014-12-17 09:52:07

标签: r pdf plot package

我正在使用R中的效果包来导出(和绘制)复杂线性模型的效果。

当我使用allEffects(linearModel)时,我可以在屏幕上看到结果并像往常一样将其保存到pdf文件中。由于该模型有许多术语,因此输出无效。

因此,我使用effects(someTerm, linearModel)专注于感兴趣的条款,屏幕上的结果是我需要的。但是,将其保存为pdf文件时,该文件不包含有用的输出(尽管它占用3.5Kb的空间)。控制台上的R没有错误消息。

为了便于理解,我创建了一个简单的数据集和一个用于生成效果图的脚本,就像我尝试使用" real"模型。

factorData.csv

A,B,C,y
a1,b1,c1,3
a1,b2,c1,4
a2,b1,c1,5
a2,b2,c1,6
a1,b1,c1,2
a1,b1,c2,3.5
a1,b2,c2,4
a2,b1,c2,5.1
a2,b2,c2,6.2

plotEffect.r

require(effects)

dataFile <- '/tmp/factorData.csv'
effectABfile <- '/tmp/effect_AB.pdf'
effectABCfile <- '/tmp/effect_ABC.pdf'
allEffectFile <- '/tmp/lm_eff.pdf'

df <- read.csv(file=dataFile,header=TRUE,sep=',')
linearModel <- lm(y~A*B*C,data=df)
lm_eff <- allEffects(linearModel)

pdf(file=effectABfile)
plot(effect('A:B',linearModel))
dev.off()

pdf(file=allEffectFile)
plot(lm_eff)
dev.off()

pdf(file=effectABCfile)
plot(Effect(c('A','B','C'),linearModel))
dev.off()

如您所见,我尝试了allEffectseffectEffect; allEffects是唯一适合我的人。请注意,该脚本假定数据放在/tmp/factorData.csv中 - 您可能需要更改路径。我还随机化了生成绘图的顺序,但没有效果。

我在其他地方查看了stackoverflow,saving plots to pdfs fails是最接近的,但是那里的建议(在每个情节之后发出dev.off()来关闭pdf文件)是我的意思已经如 plotEffect.r 中所见。

我在两台机器上尝试了这个脚本,每台机器运行Lubuntu 14.04.1 64位,R版本3.0.2,最新的效果包使用install.packages安装在R中。结果是一样的。

我非常感谢如何解决将此情节类型保存(实例)为pdf的问题。

修复/解决方法

正如@Roland在下面的评论中所建议的那样,如果您希望将网格图(例如此实例中的effects图的输出)保存为pdf文件,则生成更好/更可靠单独/手动绘制(而不是在脚本中)。对于基本图形甚至ggplot2图形来说,它似乎不是(尽可能多)一个问题,我从来没有遇到过这个问题/过去需要这种解决方法。感谢@Roland建议修复此问题!

@Roland还补充说Sys.sleep()可能有助于脚本。虽然在我的情况下没有这样做,但我发现可以粘贴几个这样的绘图命令,R会将它们作为批处理运行,将图正确保存为pdf。因此,我认为应该可以通过采取以下步骤来恢复运行脚本的许多好处:

  1. 使用R创建pdf()plot()dev.off()三元组命令的文本表示
  2. 主脚本将此绘图命令文本(特定于绘图的每个实例)输出到文件
  3. 在文本编辑器中打开绘图命令文本
  4. 复制命令文件的全部内容并将其粘贴到R控制台
  5. 或者,您可能希望在步骤3和4中使用命令行 - How can I load a file's contents into the clipboard?提供有用的建议。

    这个两阶段程序是一个合理的解决方法,但可以说不应该有它。

0 个答案:

没有答案