Zapytałem wczoraj o pytanie dotyczące przechowywania wykresu w obiekcie. Próbowałem wdrożyć pierwsze podejście (mając świadomość, że nie sprecyzowałem, że używałem qplot()
w moim oryginalnym pytaniu) i zauważyłem, że nie działa zgodnie z oczekiwaniami.Przechowywanie obiektów fabuły na liście
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()
W tym przypadku użyłem numerów próbek, aby kod działał, jeśli został właśnie skopiowany. Spędziłem kilka godzin zastanawiając się nad tym, ale nie wiem, co się dzieje. Napisał pierwszy zestaw plików PDF bez problemu, więc mam 16 plików pdf z prawidłowymi działkami.
wtedy, gdy używam ten kawałek kodu:
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()
wynik otrzymuję to ostatnia linia modelu liniowego (abline
) na każdym wykresie, ale dane nie zmienia. Kiedy sprawdzam moją listę działek, wydaje się, że wszystkie z nich zostały nadpisane przez najnowszy wykres (z wyjątkiem obiektu abline
).
Mniej ważna kwestia wtórna polegała na tym, jak wygenerować wielomiejscowy plik pdf z kilkoma działkami na każdej stronie, ale głównym celem mojego kodu było przechowywanie działek na liście, do której mogłem uzyskać dostęp w późniejszym terminie.
Dzięki RCS i Jonathan rozwiązały ten problem. Nie wiedziałem o argumencie danych i o tym, jak można go wykorzystać do przechowywania danych. Teraz sprawdzam tę część książki. – womble