Вчера я задал этот вопрос о сохранении графика внутри объекта. Я попытался реализовать первый подход (понимая, что я не указал, что я использовал qplot()
в своем исходном вопросе), и заметил, что он не работает должным образом.
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()
Я использовал номера образцов в этом случае, поэтому код запускается, если он только что скопирован. Я провел несколько часов, ломая голову над этим, но я не могу понять, что происходит не так. Он пишет первый набор файлов PDF без проблем, поэтому у меня есть 16 файлов PDF с правильными графиками.
Тогда, когда я использую этот кусок кода:
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()
В результате я получаю последнюю линейную модельную линию (abline
) на каждом графике, но данные не меняются. Когда я проверяю свой список графиков, кажется, что все они перезаписываются самым последним графиком (за исключением объекта abline
).
Менее важный дополнительный вопрос заключался в том, как создать многостраничный PDF-файл с несколькими графиками на каждой странице, но основная цель моего кода состояла в том, чтобы сохранить графики в списке, к которому я смогу получить доступ позже.