Sweave 中的自定义图形设备
Custom graphical device in Sweave
我的 已通过在 Sweave 本身之外创建 pdf 图然后导入它来解决。
根据 Sweave 文档,我编写了一个自定义图形设备,它应该以完全相同的方式构造 pdf 图形。但是它不起作用。你能解释一下为什么下面 Sweave 文档的第二个图形不起作用,而它应该与第一个完全一样创建吗?我认为它应该是错的吗?
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<setup, echo=FALSE>>=
mycairo <- function(name, width = 7, height = 7, ...) {
grDevices::cairo_pdf(name, width = width, height = height)
}
mycairo.off <- function() {
cat("shutting down mycairo\n")
invisible(grDevices::dev.off())
}
@
\section{Export plot}
<<Export_plot, echo=FALSE>>=
cairo_pdf("exported_plot.pdf")
par(mar=c(6,7,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=3)
invisible(dev.off())
@
% insert exported plot
\includegraphics[width=6cm]{exported_plot.pdf}
\section{Direct plot}
<<mycairo_plot, echo=FALSE, fig=TRUE, pdf=TRUE, grdevice=mycairo, width=4, height=4>>=
par(mar=c(6,6,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=1)
@
\end{document}
@user20650 好心建议我将 his/her 评论中给出的答案转换为官方答案。
在cairo_pdf
函数中包含pdf
文件扩展名就可以了。然后将 mycairo
函数替换为:
mycairo <- function(name, width = 7, height = 7, ...) {
grDevices::cairo_pdf(sprintf("%s.pdf", name), width = width, height = height)
}
作为旁注,您也可以将其设置为全局选项,而不是在每个图形块中指定 grdevice=mycairo
:
\SweaveOpts{grdevice=mycairo}
我的
根据 Sweave 文档,我编写了一个自定义图形设备,它应该以完全相同的方式构造 pdf 图形。但是它不起作用。你能解释一下为什么下面 Sweave 文档的第二个图形不起作用,而它应该与第一个完全一样创建吗?我认为它应该是错的吗?
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<setup, echo=FALSE>>=
mycairo <- function(name, width = 7, height = 7, ...) {
grDevices::cairo_pdf(name, width = width, height = height)
}
mycairo.off <- function() {
cat("shutting down mycairo\n")
invisible(grDevices::dev.off())
}
@
\section{Export plot}
<<Export_plot, echo=FALSE>>=
cairo_pdf("exported_plot.pdf")
par(mar=c(6,7,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=3)
invisible(dev.off())
@
% insert exported plot
\includegraphics[width=6cm]{exported_plot.pdf}
\section{Direct plot}
<<mycairo_plot, echo=FALSE, fig=TRUE, pdf=TRUE, grdevice=mycairo, width=4, height=4>>=
par(mar=c(6,6,0,6))
ylab <- expression(paste("", bar(italic("\u2113")), "(",phi[0], "|", italic(list(x,y)), ")"))
plot(0,0, ylab=ylab, xlab=NA, cex.lab=1)
@
\end{document}
@user20650 好心建议我将 his/her 评论中给出的答案转换为官方答案。
在cairo_pdf
函数中包含pdf
文件扩展名就可以了。然后将 mycairo
函数替换为:
mycairo <- function(name, width = 7, height = 7, ...) {
grDevices::cairo_pdf(sprintf("%s.pdf", name), width = width, height = height)
}
作为旁注,您也可以将其设置为全局选项,而不是在每个图形块中指定 grdevice=mycairo
:
\SweaveOpts{grdevice=mycairo}