在循环结束时重置图形:找不到函数 "device" 错误

Reset graph at the end of the loop :could not find function "device" error

我正在尝试通过循环生成绘图,这是我的代码:

n <- unique(wide_data$Product.Code)[1:3]

for (i in n)

{


my.prod2 <- filter(tall_bind, Product.Code == i, Date > ymd("2012/04/01"))

dev.new()

mypath <- file.path("C:","R","SAVEHERE",paste("myplot_", i, ".jpg", sep = ""))

jpeg(file=mypath)

mytitle = paste("Plot for product", i)

p <- qplot(Date, Sold, data = my.prod2, geom = "line", main=mytitle, group = Model, colour = Model) + facet_grid(Model ~ .)

ggsave("myplot_", i, plot=p, device= "jpg" )

}

以上代码出现以下错误:

Saving 6.67 x 6.67 in image

Error in ggsave("myplot_", i, plot = p, device = "jpg") : could not find function "device"

早些时候,当我在循环结束时使用 dev.off() 时,我发现虽然正在生成图表,但它们完全是空白的。

有人可以帮助我了解我的代码中的错误在哪里吗?

您可以省略 dev.new() 和 jpg() 命令,而且您对 ggsave() 的参数也不正确。这应该有效:

n <- unique(wide_data$Product.Code)[1:3]
for (i in n) {
    my.prod2 <- filter(tall_bind, Product.Code == i, Date > ymd("2012/04/01"))
    mypath <- file.path("C:","R","SAVEHERE",paste("myplot_", i, ".jpg", sep = ""))
    mytitle = paste("Plot for product", i)
    p <- qplot(Date, Sold, data = my.prod2, geom = "line", main=mytitle, group = Model, colour = Model) + facet_grid(Model ~ .)
    ggsave(filename = mypath, plot = p)
}

您所做的是创建一个新的默认图形设备,通常是一个绘图 window,然后是一个 jpeg 图形设备,即一个文件。然后你试图让 ggplot2 使用 ggsave 直接绘制到文件,即使用它自己的 (jpg) 设备,而不使用你创建的两个图形设备中的任何一个。

然而,这个错误是因为你给了 ggsave 错误的参数。但即使有正确的参数,您仍然会通过 dev.new()jpeg() 命令得到额外未使用的图形 windows 和文件。我建议额外阅读一些帮助(例如,在 r 控制台键入 ?ggsave)。

通常,在使用 ggplot2 时,您无需担心 dev.newjpeg 等问题。 qplotggplotggsave 应该可以满足您的所有需求。