## 安装和加载所需的包# install.packages("plotly")# install.packages("mvtnorm")library(plotly)library(mvtnorm)library(webshot2)# 创建网格数据x <-seq(150, 190, length.out =100)#身高150-190,等距的100个值y <-seq(50, 80, length.out =100)#体重50-80,等距的100个值grid <-expand.grid(X = x, Y = y)#生成 x 和 y 的所有组合,用于构建一个网格数据框,以便计算多元正态分布的概率密度。# 设置均值和协方差矩阵mu <-c(170, 65)#设置双元正态分布的均值向量,表示均值分别为身高 170 cm 和体重 65 kgsigma <-matrix(c(100, 20, 20, 25), nrow =2)#设置协方差矩阵,表示身高的方差为 100,体重的方差为 25,身高和体重之间的协方差为 20# 计算概率密度z <-dmvnorm(as.matrix(grid), mean = mu, sigma = sigma)#计算每个网格点上双元正态分布的概率密度。# 将概率密度矩阵转换为适合绘图的形状z_matrix <-matrix(z, nrow =100, ncol =100)# 绘制三维表面图plot_ly(x = x, y = y, z = z_matrix, type ="surface") %>%layout(title =list(text ="双元正态分布的三维概率密度图", y=0.95),scene =list(xaxis =list(title ="身高 (cm)"),yaxis =list(title ="体重 (kg)"),zaxis =list(title ="概率密度")))
双元正态分布示例
上述图像在被转换为PDF文件时,会发生报错:Quarto 文档中包含了一些生成 HTML 输出的函数(比如交互式图表或其他 HTML 小部件),但你当前的目标输出格式是 PDF。由于 PDF 是静态格式,无法直接渲染 HTML 内容,Quarto 会报错并停止执行。
1 解决方案1
此章节不转换为PDF格式。
2 解决方案2
增加支持:如果你仍想输出 PDF,但希望将 HTML 小部件作为静态截图嵌入,可以安装 R 的 webshot 或 webshot2 包。Quarto 会利用它们将 HTML 内容转换为图片。
需要安装:
install.packages("webshot2")
然后在这段程序的前部导入该包:library(webshot2)。
也可以使用
install.packages("webshot")
但是使用 webshot 还需要安装 PhantomJS
webshot::install_phantomjs()
3解决方案3:启用 prefer-html: true 选项
如果你不在乎 HTML 内容在 PDF 中不可见,可以通过添加 prefer-html: true 来跳过这个错误。这种方法会忽略 HTML 输出,PDF 中不会显示相关内容。
在 .qmd 文件的 YAML 前置元数据中添加:
format: pdf: toc: true # 可选{yaml}
4解决方法 4:检查并移除 HTML 输出代码
如果你的目标是纯 PDF 输出,且不需要 HTML 小部件,可以检查文档中的代码块,移除或调整生成 HTML 的部分。例如:
如果使用了 R 的 plotly 或 htmlwidgets,将其替换为静态图形库(如 ggplot2)。
检查是否有 {r, results='asis'} 或其他生成 HTML 的设置,改为适合 PDF 的输出。
示例:
将交互式图表改为静态图表:
# 原代码(生成 HTML)library(plotly)plot_ly(data, x =~x, y =~y, type ="scatter")# 修改后(适合 PDF)library(ggplot2)ggplot(data, aes(x = x, y = y)) +geom_point()
5 Quarto调用TeXLive报错
在使用方法一进行完善的过程中,terminal输出了一些关于TeX Live的信息:
TeX Live infrastructure update in progress ... TeX Live infrastructure update in progress ... Detailed command logging to "C:\texlive\2024\temp\update-self.log"self update: texlive.infra (70084-> 73495)texlive.infra.windows(69813-> 71447)tlperl.windows(69939-> 71515)Infrastructure update finished successfully. You may now close this window.
C:\Users\asus>tlmgr update --self--allLocale'English_United States.936' is unsupported, and may crash the interpreter.
这是因为:
当你运行 tlmgr update --self --all 来更新 TeX Live 时,出现了 Locale 'English_United States.936' is unsupported, and may crash the interpreter 的警告。这表明 TeX Live 的包管理器(tlmgr)在你的系统区域设置(locale)下遇到了兼容性问题,可能是因为你的 Windows 系统使用了中文(代码页 936,简体中文 GBK)作为默认区域设置,而 tlmgr 默认期望一个支持的区域设置(如 UTF-8 或英语)。