gpt4 book ai didi

pdf - 将绘图对象存储在列表中

转载 作者:行者123 更新时间:2023-12-04 13:34:29 25 4
gpt4 key购买 nike

我问 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 对象除外)。

一个不太重要的次要问题是如何生成一个多页 pdf,每页上有几个图,但我的代码的主要目标是将图存储在一个我可以在以后访问的列表中。

最佳答案

好的,所以如果您的绘图命令更改为

p <- qplot(data = data.frame(x = x, y = y),
x, y,
xlab = "Radius [km]",
ylab = "Services [log]",
xlim = x_range,
ylim = c(0,10),
main = paste("Sample",i)
) + geom_abline(intercept = inter, slope = slop, colour = "red", size = 1)

然后一切都按预期工作。这是我怀疑正在发生的事情(尽管哈德利可能会澄清一些事情)。当 ggplot2 “保存”数据时,它实际做的是保存一个数据框,以及参数的名称。所以对于我给出的命令,你得到
> summary(pltList[["a1"]])
data: x, y [50x2]
mapping: x = x, y = y
scales: x, y
faceting: facet_grid(. ~ ., FALSE)
-----------------------------------
geom_point:
stat_identity:
position_identity: (width = NULL, height = NULL)

mapping: group = 1
geom_abline: colour = red, size = 1
stat_abline: intercept = 2.55595281266726, slope = 0.05543539319091
position_identity: (width = NULL, height = NULL)

但是,如果您不指定 data qplot 中的参数,所有变量都在当前范围内进行评估,因为没有附加(读取:保存)数据框。
data: [0x0]
mapping: x = x, y = y
scales: x, y
faceting: facet_grid(. ~ ., FALSE)
-----------------------------------
geom_point:
stat_identity:
position_identity: (width = NULL, height = NULL)

mapping: group = 1
geom_abline: colour = red, size = 1
stat_abline: intercept = 2.55595281266726, slope = 0.05543539319091
position_identity: (width = NULL, height = NULL)

因此,当第二次生成绘图时,它不使用原始值,而是使用 x 的当前值。和 y .

关于pdf - 将绘图对象存储在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1820590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com