我正在准备一个用 Sweave 制作的 Beamer 演示文稿,想在其中放置一些 ggplot2 图表,但纵横比似乎不正确。这是我的 Rnw 文件中的内容。
\begin{frame}[containsverbatim]
\frametitle{Basic Workflow}\begin{itemize}
\item Start R (Start > All Programs > R > R x64 2.12.0 )\\
\item Load Packages
<<>>=
library(ggplot2)
library(MASS)
@
\item Load Data
<<>>=
data(iris) # or read.csv/read.table/etc.
head(iris[,3:5],n=3)
@
\item Graph Data
<<>>=
qplot(Petal.Length,Petal.Width,color=Species, data=iris)->p
@
\end{itemize}\end{frame}
\begin{frame}{Basic Workflow, Cont.}
<<fig=T,echo=F>>=
show(p)
@
\end{frame}
得到的是底部被切掉的图表,占据了页面的左半部分。
答案1
我觉得这很痛苦。我已经开始做类似的事情
% one-column
\SweaveOpts{height=5,width=8,echo=FALSE}
\setkeys{Gin}{width=4in}
% two-column
\SweaveOpts{echo=FALSE,height=5,width=5}
\setkeys{Gin}{width=2.25in}
不幸的是,我不知道将其合并到 LaTeX 命令中的好方法;如果我将它们打包到 \onecolumnfig{} 或 \twocolumnfig{} LaTeX 宏中,Sweave 就看不到它们(因为它们直到 Sweave 处理完文件后才会展开)。
邓肯·默多克 (Duncan Murdoch) 在 R 列表中提供了有关此主题的各种有用信息:
这里和这里例如(谷歌搜索“murdoch sweave setkey”的结果)
ETC。
编辑:我认为现在的答案是“使用 knitr”(http://yihui.name/knitr/)——它允许out.width="0.8\\textwidth"
在块选项中进行(例如)规范。
答案2
您可以在部分中设置显式尺寸参数<< ... >>
。或者,您也可以使用 R 代码片段创建 PDF 文件,然后包含具有显式设置尺寸的 PDF。
这是我在中央商务区纸张/插图:
\begin{figure}[t!]
\centering
<<loglogslopes,fig=TRUE,height=4.25,width=11>>=
figure_LogLogSlopes()
@
\caption{Comparison of slopes in log/log analysis of BLAS performance.}
\label{fig:slopeloglog}
\end{figure}
答案3
我编写了一个函数,将图保存到文件并写入 LaTeX 代码。在块中使用它,并将 result = tex。此函数的另一个好处是您可以在一个块中显示多个图形。
ggsave.latex <- function(..., caption = NULL, label = NULL, figure.placement = "hbt", floating = TRUE, caption.placement="bottom", latex.environments="center"){
ggsave(...)
cat("\n\n")
if(floating){
cat("\\begin{figure}[", figure.placement, "]\n", sep = "")
}
cat(" \\begin{", latex.environments,"}\n", sep = "")
if(!is.null(caption) && caption.placement == "top"){
cat(" \\caption{", caption, "}\n", sep = "")
}
args <- list(...)
if(is.null(args[["filename"]])){
if(is.null(args[["path"]])){
args[["path"]] <- ""
}
if(is.null(args[["plot"]])){
names(args)[which(names(args) == "")[1]] <- "plot"
}
args[["filename"]] <- paste(args[["path"]], digest.ggplot(args[["plot"]]), ".pdf", sep="")
}
if(is.null(args[["width"]])){
if(is.null(args[["height"]])){
cat(" \\includegraphics[height = 7in, width = 7in]{", args[["filename"]], "}\n", sep = "")
} else {
cat(" \\includegraphics[height = ", args[["height"]], "in, width = 7in]{", args[["filename"]], "}\n", sep = "")
}
} else {
if(is.null(args[["height"]])){
cat(" \\includegraphics[height = 7in, width = ", args[["width"]], "in]{", args[["filename"]], "}\n", sep = "")
} else {
cat(" \\includegraphics[height = ", args[["height"]], "in, width = ", args[["width"]], "in]{", args[["filename"]], "}\n", sep = "")
}
}
if(!is.null(caption) && caption.placement == "bottom"){
cat(" \\caption{", caption, "}\n", sep = "")
}
if(!is.null(label)){
cat(" \\label{", label, "}\n", sep = "")
}
cat(" \\end{", latex.environments,"}\n", sep = "")
if(floating){
cat("\\end{figure}\n")
}
cat("\n\n")
}
答案4
默认情况下,Sweave 将图形拉伸至文本宽度的 80%;您可以全局关闭此功能,并使用以下选项让图片始终保持其原始大小nogin
:
\documentclass[nogin]{article}