昨天我問this關於在對象中存儲圖的問題。我嘗試實施第一種方法(意識到我沒有指定我在原始問題中使用了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
對象外)。
不太重要的第二個問題是如何在每個頁面上生成多頁圖表,但我的代碼的主要目標是將圖表存儲在我可以在以後訪問的列表中。
感謝RCS和Jonathan,這解決了這個問題。我不知道數據參數以及它如何用於存儲數據。我正在研究這本書的這一部分。 – womble 2009-11-30 22:19:38