Ich fragte gestern this Frage über das Speichern eines Plots in einem Objekt. Ich habe versucht, den ersten Ansatz zu implementieren (bewusst, dass ich nicht angegeben habe, dass ich qplot()
in meiner ursprünglichen Frage verwendet) und bemerkte, dass es nicht wie erwartet funktioniert hat.Speichern von Plot-Objekten in einer Liste
library(ggplot2) # add ggplot2
string = "C:/example.pdf" # Setup pdf
pdf(string,height=6,width=9)
x_range <- range(1,50) # Specify Range
# Create a list to hold the plot objects.
pltList <- list()
pltList[]
for(i in 1 : 16){
# Organise data
y = (1:50) * i * 1000 # Get y col
x = (1:50) # get x col
y = log(y) # Use natural log
# Regression
lm.0 = lm(formula = y ~ x) # make linear model
inter = summary(lm.0)$coefficients[1,1] # Get intercept
slop = summary(lm.0)$coefficients[2,1] # Get slope
# Make plot name
pltName <- paste('a', i, sep = '')
# make plot object
p <- qplot(
x, y,
xlab = "Radius [km]",
ylab = "Services [log]",
xlim = x_range,
main = paste("Sample",i)
) + geom_abline(intercept = inter, slope = slop, colour = "red", size = 1)
print(p)
pltList[[pltName]] = p
}
# close the PDF file
dev.off()
Ich habe in diesem Fall Beispielnummern verwendet, so dass der Code ausgeführt wird, wenn es nur kopiert wird. Ich habe ein paar Stunden damit verbracht, darüber zu rätseln, aber ich kann nicht herausfinden, was falsch läuft. Es schreibt den ersten Satz von PDFs ohne Probleme, also habe ich 16 pdfs mit den richtigen Plots.
Dann, wenn ich dieses Stück Code:
string = "C:/test_tabloid.pdf"
pdf(string, height = 11, width = 17)
grid.newpage()
pushViewport(viewport(layout = grid.layout(3, 3)))
vplayout <- function(x, y){viewport(layout.pos.row = x, layout.pos.col = y)}
counter = 1
# Page 1
for (i in 1:3){
for (j in 1:3){
pltName <- paste('a', counter, sep = '')
print(pltList[[pltName]], vp = vplayout(i,j))
counter = counter + 1
}
}
dev.off()
das Ergebnis, das ich bekomme, ist die letzte lineare Modell Linie (abline
) auf jedem Graphen, aber die Daten nicht ändern. Wenn ich meine Liste von Plots überprüfe, scheint es, dass sie alle von dem letzten Plot überschrieben werden (mit Ausnahme des Objekts abline
). Eine weniger wichtige sekundäre Frage war, wie man eine Multi-Seiten-PDF mit mehreren Plots auf jeder Seite generiert, aber das Hauptziel meines Codes war es, die Plots in einer Liste zu speichern, auf die ich zu einem späteren Zeitpunkt zugreifen konnte.
Danke RCS und Jonathan, das Problem wurde behoben. Ich war mir des Datenarguments nicht bewusst und wusste, wie es zum Speichern der Daten verwendet werden konnte. Ich untersuche gerade diesen Abschnitt des Buches. – womble