在data.table链式操作中autoplot生成空白PNG图的问题
解决autoplot在data.table分组中生成空白图像的问题
你遇到的空白画布问题,根源在于ggplot的图形对象在data.table的分组表达式里不会自动渲染——autoplot返回的是一个ggplot对象,但在非交互式的代码块(比如{}里),必须显式调用print()才能让它绘制到图形设备上,否则dev.off()关闭设备时,画布还是空的。
修正后的代码
直接在你的代码里添加print()包裹autoplot的结果就行:
require(data.table) require(forecast) require(ggplot2) # 创建data.table a <- data.table(id = 1:2) a[, x := .(list(sample(1:10, 5, FALSE))), by = id] a[, y := .(list(forecast(x[[1]]))), by = id] # 按id绘图并保存(关键修改:添加print()) a[, { png(paste0(id, ".png")) print(autoplot(y[[1]])) # 必须显式打印ggplot对象 dev.off() }, by = id]
为什么这样有效?
ggplot的绘图函数(包括autoplot)返回的是一个ggplot图形对象,而不是直接输出图像。在R控制台里,这个对象会被自动调用print()来渲染,但在data.table的分组操作、循环或者自定义函数内部,这种自动渲染的机制不会触发,必须手动调用print()来告诉R:“把这个图形对象绘制到当前的图形设备上”。
这样修改后,每个分组的预测图像就能正确保存为对应的1.png和2.png了。
内容的提问来源于stack exchange,提问作者PavoDive
相关产品推荐
相关产品推荐

