我正在使用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")
答案 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机器可以测试。