使用savePlot保存为pdf时,图例被截断

时间:2012-02-22 17:49:58

标签: r plot

我正在使用savePlot以多种格式保存图表。我的pdf格式有问题:我的图例在pdf文件中被截断,但在R图形窗口中没有。我在Windows 7上。这是一个小例子,显示图例在屏幕上看起来很棒:

win.graph(width=4.375,height=2.8)
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5))
plot(1:10,type="l")
legend.names <-c("Dividend yield (L)","Core CPI (L)",
    "Dividend yield - core CPI spread (R)")
legend("bottomright", legend=legend.names,  lwd=1, cex=0.7, col =1:3,lty=1:3)

但是当我尝试将图表保存为pdf时,图例会被截断。最后的'(R)'不完整。

savePlot(filename = paste("c:/out.pdf",sep=""), type ="pdf")

enter image description here

5 个答案:

答案 0 :(得分:3)

解决方案是直接打印到pdf()设备而不是通过一个窗口:

pdf(width=4.375, height=2.8, file = "out.pdf")

par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5))
plot(1:10,type="l")
legend.names <-c("Dividend yield (L)","Core CPI (L)",
    "Dividend yield - core CPI spread (R)")
legend("bottomright", legend=legend.names,  lwd=1, cex=0.7, col =1:3,lty=1:3)

dev.off()

答案 1 :(得分:1)

您可以切换到较小的“Helvetica-Narrow”字体,使用此功能可以在打印到pdf时覆盖savePlot()的行为:

my.savePlot <- function(filename, type) {
   if (type == "pdf") {
      dev.copy(pdf, filename, width  = par("din")[1],
                              height = par("din")[2],
                              family = "Helvetica-Narrow")
      invisible(dev.off())
   } else {
      savePlot(filename, type)
   }
}

答案 2 :(得分:0)

让我们看看你对这个有什么看法,也许第三次是魅力!在这里,我们使用recordPlot()replayPlot(),因此我们可以将图表复制到pdf()。请注意,legend()调用必须包含在recordGraphics()中,以便将其记录在图形的显示列表中。

my.savePlot <- function(filename, type) {
   if (type == "pdf") {
      saved.plot <- recordPlot()
      pdf(filename, width  = par("din")[1],
                    height = par("din")[2])
      replayPlot(saved.plot)
      invisible(dev.off())
   } else {
      savePlot(filename, type)
   }
}

win.graph(width=4.375,height=2.8)
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5))
plot(1:10,type="l")
legend.names <-c("Dividend yield (L)","Core CPI (L)",
                 "Dividend yield - core CPI spread (R)")
recordGraphics(legend("bottomright", legend=legend.names,
                      lwd=1, cex=0.7, col =1:3,lty=1:3),
               list(), getNamespace("graphics"))

my.savePlot(filename = paste("out.pdf",sep=""), type ="pdf")

答案 3 :(得分:0)

为什么不以这种方式尝试?它不再存在问题,你可以更好地控制它。

pdf("out.pdf", width=4.375,height=2.8)
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5))
plot(1:10,type="l")
legend.names <-c("Dividend yield (L)","Core CPI (L)",
             "Dividend yield - core CPI spread (R)")
legend("bottomright", legend=legend.names,  lwd=1, cex=0.7, col =1:3,lty=1:3)
dev.off()

嗯...,flodel得到了相同的答案,我同意你应该在它周围写一个包装器或者编写你自己的运行良好的savePlot函数。

答案 4 :(得分:0)

试试inset=0.05。这有助于我解决过去的类似问题,虽然我没有Win7机器可以测试。