2017-11-20 4 views
1

Beispielcode auszuführen:Fehler abline zu einem xts Plot hinzugefügt, wenn sie in Klammern

df_2=as.data.frame(c(1:10)) 
rownames(df_2)=Sys.Date()+c(1:10) 
xts_2=as.xts(df_2) 
vline=.index(xts_2)[4] 

{ 
    png(filename = paste0(Sys.Date(),'-test',".png"), width = 800, height = 600) 
    plot(xts_2[,1]) 
    print(dev.cur()) 
    abline(v=vline, col="red") 
    dev.off() 
} 

Wenn ich die Zeilen aus png ... dev.off() und führen Sie wählen, bekomme ich die gewünschte Ausgabedatei.

Allerdings, wenn ich die Sequenz mit den Klammern ausgewählt (zum Beispiel ausgeführt werden, wenn ein bedingten erfüllt ist) laufen lasse, erhalte ich die Fehlermeldung:

Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
    plot.new has not been called yet 

Das Ergebnis des Drucks (dev.cur()) Linie ist in beiden Fällen:

png 
    2 

Antwort

0

die Streben auto-Druck, ähnlich wie wenn der Anruf plot() war in einer for Schleife oder eine Funktion zu unterdrücken. Sie können dies umgehen, indem Sie das Diagramm explizit drucken.

{ 
    png(filename = paste0(Sys.Date(),'-test',".png"), width = 800, height = 600) 
    print(plot(xts_2[,1])) 
    print(dev.cur()) 
    abline(v=vline, col="red") 
    dev.off() 
} 
+0

Danke. Das löst das Problem für mich. Beim Debuggen dieses Problems habe ich ein merkwürdiges Verhalten bemerkt: Wenn ich xts_2 plotte (gespeichert als ein Datenrahmen), erhalte ich den Fehler nicht, aber wenn ich xts_2 plotte (wie oben definiert), bekomme ich den Fehler. – rsoto74

+0

@ rsoto74: Das liegt daran, dass der Aufruf von 'plot()' auf einem data.frame nach 'plot.default()', nicht nach 'plot.xts() 'erfolgt. 'plot.default()' erfordert kein explizites Drucken (wie ggplot2, gitter, usw.), wenn das automatische Drucken deaktiviert ist. –

Verwandte Themen