R Markdown导出Word图表分辨率低及tiff导出报错求助
问题与解决方案
问题
- R Markdown生成Word文档时,ggplot图表分辨率极差
- 尝试用
tiff()函数导出高分辨率图片,触发报错:Error in dev.off() : cannot shut down device 1 (the null device) - 已尝试
while (!is.null(dev.list())) dev.off()和dev.set(dev.next()),问题未解决
原绘图代码:
library(tidyverse) library(readxl) SR_STATS <- read_excel('E:\\MY PROJECTS\\STRESS RADIOGRAPHS\\SR_STATS.xlsx') FINALSR <- SR_STATS FINALSR$Ligament <- factor(FINALSR$Ligament, levels = c("Multiligament","Valgus","Varus","PCL","ACL")) ggplot(data = FINALSR) + geom_bar(mapping = aes(x = Time_Period, fill = Ligament))
尝试的高分辨率导出代码:
tiff("SR.tiff", units="in", width=5, height=5, res=300) ggplot(data = FINALSR) + geom_bar(mapping = aes(x = Time_Period, fill = Ligament)) dev.off ()
解决方案
1. 直接提升R Markdown导出Word的图表分辨率
无需额外导出函数,直接通过R Markdown参数设置即可:
- 单个代码块设置:在绘图代码块开头添加
dpi=300参数,示例:
{r, dpi=300} ggplot(data = FINALSR) + geom_bar(mapping = aes(x = Time_Period, fill = Ligament))
- 全局设置:在文档顶部的YAML配置中添加
dpi: 300,所有图表自动应用该分辨率:
--- title: "你的文档标题" output: word_document: dpi: 300 ---
2. 解决tiff()导出的报错问题
R Markdown的绘图设备管理逻辑和普通R脚本不同,直接用tiff()易出现设备冲突,推荐用ggsave()(专为ggplot设计的导出函数):
# 导出300dpi的TIFF图片 ggsave( filename = "SR.tiff", plot = ggplot(data = FINALSR) + geom_bar(mapping = aes(x = Time_Period, fill = Ligament)), units = "in", width = 5, height = 5, dpi = 300 )
如果坚持使用tiff(),需注意两点:一是显式调用print()渲染ggplot,二是确保设备状态正常:
# 关闭所有现有绘图设备 graphics.off() # 打开TIFF设备 tiff("SR.tiff", units="in", width=5, height=5, res=300) # 显式打印ggplot print(ggplot(data = FINALSR) + geom_bar(mapping = aes(x = Time_Period, fill = Ligament))) # 关闭设备 dev.off()
内容的提问来源于stack exchange,提问作者Ahmed Mabrouk
相关产品推荐
相关产品推荐

