如何在 Beamer 中获取 ggplot2 图的正确尺寸

如何在 Beamer 中获取 ggplot2 图的正确尺寸

我正在准备一个用 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}

相关内容