RStudio中LaTeX编译PDF时R生成图片无法显示问题
R/LaTeX混合工作流绘图不显示的排查修正
核心配置错误(直接导致图无法嵌入)
- R代码块参数设置完全不符合Sweave工作流要求
你当前的R代码块开头写的是<<eval=False>>=,存在三处关键问题:- 逻辑值写法不符合R语法规范:Sweave传递给R的逻辑参数必须是全大写的
TRUE/FALSE,写False会被R识别为未定义对象,直接导致代码块执行报错中断 - 缺失绘图触发参数:就算把参数改成正确的大写格式,没有添加
fig=TRUE参数的话,Sweave只会运行R代码输出文本结果,不会自动导出绘图文件、对接LaTeX嵌入流程,最终PDF里自然看不到图 - 如果按当前写法让eval实际生效为“不执行代码”,整个R代码块完全不会运行,连图表生成的环节都不会触发
可正常触发绘图嵌入的代码块格式参考:<<fig=TRUE, echo=FALSE, width=7, height=7>>=,其中fig=TRUE是绘图嵌入必需的参数,echo=FALSE可按需设置为不把R代码本身输出到PDF中。
- 逻辑值写法不符合R语法规范:Sweave传递给R的逻辑参数必须是全大写的
R代码逻辑缺陷(即使配置正常也会导致图显示异常)
- 循环变量被意外覆盖:你外层循环用来遍历16个lambda值计算递推序列,内层又写了
for (i in seq_along(l))遍历相同的16个值,直接覆盖了外层用来计算递推的i变量,会导致每算完1条递推序列,就重新把16张图全部重画一遍,完全违背最初设置par(mfrow=c(4,4))做4×4组合图的初衷,最终生成的绘图会反复覆盖内容。 - 绘图流程位置不合理:既然要做组合图,应该等所有递推值全部计算完成后,再统一进行绘图操作,不需要在递推计算的循环里反复调用绘图函数。
修正后可正常运行的代码片段
\subsection{Plots} \begin{figure} <<fig=TRUE, echo=FALSE, width=7, height=7>>= # 初始化种群矩阵 x = matrix(NA, nrow = 16, ncol = 30) x[,1] = 0.01 # 定义逻辑斯蒂递推函数 calc.x = function(r, X) r * X * (1 - X) # 生成lambda序列 l = seq(.25, 4.0, .25) # 逐值计算递推序列 for (i in 1:16) { for (t in 1:29) { x[i,t+1] = calc.x(l[i], x[i,t]) } } # 设置4×4的绘图布局 par(mfrow = c(4,4), mar = c(4,4,3,1)) # 逐序列绘制图 for (i in seq_along(l)) { plot(1:30, x[i,], main = bquote(lambda == .(l[i])), xlab = "Day", ylab = "Population", type = "l") abline(h = 1, lty = 2, col = 'grey') } @ \caption{不同lambda参数下的逻辑斯蒂映射种群时序图} \end{figure}
编译注意事项
- 需使用RStudio内置的Sweave编译流程(织成LaTeX后自动对接PDF编译),不能直接调用普通PDFLaTeX编译源文件,否则R代码块不会被解析执行
- 确保R的工作路径和当前的
.Snw/.tex源文件在同一文件夹,避免生成的绘图文件路径错误导致LaTeX找不到图。
内容的提问来源于stack exchange,提问作者James Golden
相关产品推荐
相关产品推荐

