R无法将ts_plot生成的时序图写入磁盘问题求助
解决TSStudio ts_plot无法保存图片到磁盘的问题
问题重现
使用TSStudio包的ts_plot函数绘制时序图,代码如下:
library(tidyverse) library(TSStudio) `standard-data` <- c(1,2,3,4) png("test.png") ts_plot(as.ts(`standard-data`), title = "Foo", Xtitle = "Rounds", Ytitle = "Nanos") dev.off()
在RStudio或带插件的Intellij中图形可正常显示,但无法写入磁盘;直接在shell运行脚本也无法生成test.png,尝试savePlot()和print()方法同样无效。
环境信息:
> version _ platform x86_64-pc-linux-gnu arch x86_64 os linux-gnu system x86_64, linux-gnu status major 4 minor 1.2 year 2021 month 11 day 01 svn rev 81115 language R version.string R version 4.1.2 (2021-11-01) nickname Bird Hippie
解决方案
ts_plot本质是基于ggplot2生成可视化对象,无需使用基础绘图的png()/dev.off()流程,直接用ggplot2的ggsave()函数保存即可,步骤如下:
- 将
ts_plot的输出赋值给变量(它返回ggplot对象) - 调用
ggsave()保存该对象到指定路径
修改后的代码:
library(tidyverse) library(TSStudio) `standard-data` <- c(1,2,3,4) # 生成绘图对象并赋值 p <- ts_plot(as.ts(`standard-data`), title = "Foo", Xtitle = "Rounds", Ytitle = "Nanos") # 保存图片,可按需调整宽高参数 ggsave("test.png", plot = p, width = 8, height = 5)
也可以直接链式调用:
ts_plot(as.ts(`standard-data`), title = "Foo", Xtitle = "Rounds", Ytitle = "Nanos") %>% ggsave("test.png", plot = ., width = 8, height = 5)
原因说明
基础绘图设备(如png())对ggplot2生成的对象支持不佳,因为ggplot2有独立的绘图渲染系统。ts_plot作为封装ggplot2的函数,返回的是ggplot对象而非基础绘图的图形,因此png()/dev.off()无法正确捕获并保存图形,而ggsave()是ggplot2专门的保存函数,能正确处理这类对象。
内容的提问来源于stack exchange,提问作者Gus
相关产品推荐
相关产品推荐

