如何在R Markdown中设置base graphics的默认字体?
问题:R Markdown(HTML输出)中设置base graphics默认字体不生效
我想在R Markdown的HTML输出里设置base graphics的默认字体,用par(family = "monospace")设置后发现不生效,但在终端直接执行这个设置却能正常工作。显式在绘图函数里指定family参数是有效的,但全局设置就是不行。
我的R Markdown文档结构如下:
--- title: "Setting font in par" output: html_document ---
尝试设置默认字体的代码:
par(family = "monospace")
执行绘图时,R Markdown渲染出的图不使用设置的字体,但终端里执行却正常:
plot(1:10, main = "title") # R Markdown渲染输出未使用正确字体,但终端执行正常
显式指定字体则可以正常工作:
plot(1:10, main = "title", family = "monospace")
解决方案
出现这个问题的核心原因是:R Markdown中每个代码块默认运行在独立环境里,par()的设置只对当前代码块有效,后续代码块会重置图形参数。要实现全局生效,有几种可行的方法:
方法1:将参数设置和绘图放在同一个代码块
把par()设置和绘图代码放在同一个代码块中,参数设置会直接作用于后续绘图:
par(family = "monospace") plot(1:10, main = "title") # 此时会使用monospace字体
方法2:使用setup代码块全局设置
在R Markdown中,命名为setup的代码块(加上echo=FALSE避免输出)会在所有代码块之前运行,且其环境会被后续代码块继承。可以在这里设置全局图形参数:
# 全局设置base graphics的默认字体 par(family = "monospace")
之后的任意代码块绘图都会自动使用这个字体:
plot(1:10, main = "title") # 设置生效
方法3:指定图形设备的默认字体
另一种更可靠的方式是直接设置图形设备的默认字体,所有通过该设备生成的图都会自动使用指定字体。对于HTML输出常用的png设备,可以这样设置:
options(device = function(...) { grDevices::png(..., family = "monospace") })
这种方法不受代码块环境的影响,全局生效更稳定。
内容的提问来源于stack exchange,提问作者statquant
相关产品推荐
相关产品推荐

