【问题标题】:R script that should plot xts class data to a png file doesn't produce a png file应该将 xts 类数据绘制到 png 文件的 R 脚本不会生成 png 文件
【发布时间】:2018-01-21 19:13:38
【问题描述】:

我有一个工作脚本,它使用循环生成许多 xts 类数据的 png 文件图。现在脚本抛出一个错误,如果我注释掉抛出错误的行(调用 abline() )然后脚本执行但不生成 png 文件。该问题似乎涉及绘制 xts 类数据和/或循环或脚本。

在 stackoverflow 上搜索并没有提供对此问题的解决方案或参考。我在以下示例中重现了该问题。在实践中,脚本会在循环和重要数据中使用不同的文件名。

# put following code in 'myscript.R' and execute using source('myscript.R',print.eval=TRUE) or  source('myscript.R')
# xts class data
data <- xts(seq(1:10),order.by=as.Date(seq(1:10)))

# a non xts version of same data
#data <- seq(1:10)

for(i in 1:1) {
filename <- 'myfile.png'
png(filename)
plot(data)
lines( (data-1),col='red')
abline(h=1)
dev.off()
}
# The call to abline in above script with xts class data gives error 'plot.new has not been called yet'
# If comment out the call to abline it completes but doesn't produce a png file
# script works fine with abline for non xts data

【问题讨论】:

    标签: r plot png xts


    【解决方案1】:

    使用xts &gt;= 0.10.1,这会将您想要的内容保存到文件中

    for(i in 1:1) {
        filename <- 'myfile.png'
        png(filename)
        plot(data)
        print(lines( (data-1),col='red', on = 1))
        print(lines(xts(x = rep(1, NROW(data)), order.by = index(data)),col='green', on=  1)    )
        dev.off()
    }
    

    使用print 调用额外的行。我也会使用lines 作为水平线,而不是abline,因为这与使用 xts 绘图更一致。

    如果你这样做 print(abline(h=1)) 也可以避免你的错误

    【讨论】:

    • 谢谢!这样可行。冒着问另一个问题的风险,现在需要使用“打印”(脚本之前没有它)的变化以及我应该如何了解这些变化?
    • @tedthedog 作为一个经验法则,当您在循环中生成图并向图中添加内容时,请使用 print 语句确保打印额外的内容(您需要在 Shiny 中执行此操作在制作情节时也是如此)。在 interactive 模式下(在循环之外,从控制台逐行获取等),您不需要在制作绘图时使用打印语句,然后添加新内容(例如ablines)到情节(被重绘)
    猜你喜欢
    • 2015-07-08
    • 2021-05-20
    • 2016-02-06
    • 2016-05-25
    • 1970-01-01
    • 2014-10-04
    • 2019-06-22
    • 2013-05-26
    • 2020-02-06
    相关资源
    最近更新 更多