这种情况不会被正确解释。我怀疑这一定与我的写作风格有关,但我没有注意到是什么。您可以运行它并R CMD Sweave Test.Rnw; pdflatex Test.tex
生成 Test.tex 文件,然后编译为 Test.pdf。
是什么原因导致运行结果乱码?为什么 Sweave 块无法正确解释?
Test.Rnw 导致乱码
\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{Sweave}
\begin{document}
.
\begin{figure}
\centering
\begin{subfigure}[b]{0.55\textwidth}
<<>>=
all.lab <- c("Arr./A", "Sin", "Digox")
all.dat <- c(2274959, 1531001, 2406739)
barplot(all.dat,
names.arg=all.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
%\includepdf{fig1.pdf}
\caption{a}
\label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<>>=
age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
barplot(age.dat,
names.arg=age.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
%\includepdf{fig2.pdf}
\caption{b}
\label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
%\includepdf{fig3.pdf}
<<>>=
gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
barplot(gender.dat,
names.arg=gender.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
\caption{c}
\label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}
答案1
错误在于您缩进了 Sweave 块,您必须取消缩进该块。Sweave 似乎对缩进很敏感。
\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{Sweave}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
all.lab <- c("Arr./A", "Sin", "Digox")
all.dat <- c(2274959, 1531001, 2406739)
barplot(all.dat,
names.arg=all.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
\caption{a}
\label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
barplot(age.dat,
names.arg=age.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
\caption{b}
\label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
barplot(gender.dat,
names.arg=gender.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
\caption{c}
\label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}
最小工作示例
我解决问题的方法是封装问题,我注意到代码中似乎有一些冲突的字符、块或空格。我提供了以下一些小的工作示例,让我意识到错误一定出在缩进中。
示例 1. OP 的子案例与 Sweave 合作
\documentclass{article}
\usepackage{graphicx}
\usepackage{Sweave}
\begin{document}
\begin{figure}
<<fig=TRUE>>=
library(ggplot2)
all.lab <- c('Arr./A', 'Sin', 'Digox')
all.dat <- c(2274959, 1531001, 2406739)
ggplot() + geom_bar(aes(x=all.lab, y=all.dat), stat='identity')
@
\end{figure}
\end{document}
示例 2. Ggplot 与 Sweave 配合使用
\documentclass{article}
\usepackage{graphicx}
\usepackage{Sweave}
\begin{document}
\SweaveOpts{concordance=TRUE}
\begin{figure}
\centering
<<fig=TRUE>>=
library(ggplot2)
p <- ggplot(diamonds, aes(x=carat))
p <- p + geom_histogram()
print(p)
@
\end{figure}
\end{document}
示例 3. 使用 Sweave 的基本命令
\documentclass{article}
\usepackage{graphicx}
\usepackage{Sweave}
\begin{document}
\begin{figure}
\centering
<<fig=TRUE>>=
plot(1:10)
@
\end{figure}
\end{document}
跑步
- R CMD Sweave 测试.Rnw
- pdflatex 测试.txt
- 开放测试.pdf
答案2
使用 Rstudioknitr
,您的代码照原样可以编译显示图表,但您必须添加echo=FALSE
隐藏 R 代码并将三幅图像放在一页中。当然,这\usepackage{Sweave}
不是必需的(使用 Sweave 和 Rstudio 也不需要)。您还可以省略浮动之外的任何文本。
如果您需要继续使用 Sweave,那么您应该关心块缩进、fig=TRUE
选项,当然,至少对于具有三个子图的浮点数,省略回显。
\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[b]{0.55\textwidth}
<<echo=F>>=
all.lab <- c("Arr./A", "Sin", "Digox")
all.dat <- c(2274959, 1531001, 2406739)
barplot(all.dat,
names.arg=all.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
%\includepdf{fig1.pdf}
\caption{a}
\label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<echo=F>>=
age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
barplot(age.dat,
names.arg=age.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
%\includepdf{fig2.pdf}
\caption{b}
\label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
%\includepdf{fig3.pdf}
<<echo=F>>=
gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
barplot(gender.dat,
names.arg=gender.lab,
col="darkblue",
ylab="Average byte size",
xlab="Groups")
grid()
@
\caption{c}
\label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}
此外,knitr
功能更强大:只需考虑使用 knitr 的“示例 2”:
\documentclass{article}
\begin{document}
\begin{figure}
<<>>=
library(ggplot2)
p <- ggplot(diamonds, aes(x=carat))
p <- p + geom_histogram(bins=30)
print(p)
@
\end{figure}
\end{document}