我正在解决我的R在线课程的任务。任务是通过给定X和Y的功能来创建并保存以下pdf文件,并使用Reg(50)和set.seed(1423)对其进行测试:
第一步是创建基本的Reg()函数,该函数仅创建一个绘图。看起来像这样:
Reg<-function(Anzahl){
set.seed(1423)
if(Anzahl<0|!(is.numeric(Anzahl)&&floor(Anzahl)==Anzahl))stop("Schreiben Sie eine positive ganze Zahl")
X<-runif(Anzahl,min=0,max=20)
Y<-3-0.2*X+rnorm(Anzahl,0,1)
model<-lm(Y~X,data=data.frame(X=X,Y=Y))
object<-paste0("Gleichung: y(x)=",round(coef(model)[[1]],2)," ",round(coef(model)[[2]],2),"*x")
plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue",main=paste0("Regressionsanalyse \n",object))
axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
axis(side=2,at=c(seq((min(Y)%%2==T)*min(Y)+floor(min(Y))-1,(max(Y)%%2==T)*max(Y)+ceiling(max(Y))+1,2)),col=NA,las=1,cex.axis=1.2)
mtext(side=1,"Unabhängige Variable",line=2,cex=1.1)
mtext(side=2,"Abhängige Variable",line=2,cex=1.1)
abline(lm(Y~X),col="red",lwd=2)
grid()
}
任务是使用copy()函数创建9个随机生成的图(如图片中的图),并将它们保存在一个pdf文件中,与图片尽可能相似。为此,在绘图区域内,一个绘图的边距在顶部,底部和左侧为0.5 in,在右侧为0.1 in。
如何使用copy()函数获取输出?
答案 0 :(得分:1)
WebDataField
中的pdf
函数可用于切换到pdf文件作为图形上下文。 grDevices
可以在同一页面/框架上绘制多个图形,因此par(mfrow = c(nrow,ncol)
的图被堆叠在同一框架的nrow * ncol
网格中。 nrow x ncol
函数用于重复计算表达式。因此,这应该可行:
replicate
一个问题是您要在要调用的函数内设置种子,该种子将生成观测值,拟合模型并创建图。这将导致每次都生成完全相同的观察结果,这可能不是本练习的重点,因为您所附图片中的图在彼此之间略有不同。而是在复制调用之前将种子设置在外面。
> pdf("Regplots.pdf")
> par(mfrow = c(3,3))
> dummy=replicate(9, Reg(50))
> dev.off()
pdf
2
>
P.S。对于您附加的图像中的点的颜色,应将> Reg<-function(Anzahl){
+ if(Anzahl<0|!(is.numeric(Anzahl)&&floor(Anzahl)==Anzahl))stop("Schreiben Sie eine positive ganze Zahl")
+ X<-runif(Anzahl,min=0,max=20)
+ Y<-3-0.2*X+rnorm(Anzahl,0,1)
+ model<-lm(Y~X,data=data.frame(X=X,Y=Y))
+ object<-paste0("Gleichung: y(x)=",round(coef(model)[[1]],2)," ",round(coef(model)[[2]],2),"*x")
+ plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue",main=paste0("Regressionsanalyse \n",object))
+ axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
+ axis(side=2,at=c(seq((min(Y)%%2==T)*min(Y)+floor(min(Y))-1,(max(Y)%%2==T)*max(Y)+ceiling(max(Y))+1,2)),col=NA,las=1,cex.axis=1.2)
+ mtext(side=1,"Unabhängige Variable",line=2,cex=1.1)
+ mtext(side=2,"Abhängige Variable",line=2,cex=1.1)
+ abline(lm(Y~X),col="red",lwd=2)
+ grid()
+ }
>
> pdf("Regplots.pdf")
> set.seed(1423)
> par(mfrow = c(3,3))
> dummy=replicate(9, Reg(50))
> dev.off()
pdf
2
参数设置为bg
:出于某种原因,"blue"
在pdf文件中会变得太暗。
编辑:来自https://www.statmethods.net/advgraphs/axes.html: “如果要创建自定义轴,则应抑制由高级绘图功能自动生成的轴。选项axis = FALSE抑制x和y轴。xaxt =“ n”和yaxt =“ n”抑制x和y轴。”
您可以使用链接中所述的方法将y轴标签仅固定为偶数。为了设置打印页边距,"darkblue"
的参数par
和mar
用于设置文本宽度和英寸的边距(仅提供一个)-作为数字矢量,其顺序为下,左,上是的,但是在这里似乎无法正常工作。
答案 1 :(得分:0)
这是使用ggplot2
的一种尝试。
这将生成数据,一个包含9个data.frames的列表。
Anzahl <- 50
X <- runif(Anzahl, min = 0, max = 20)
set.seed(1423)
data <-
replicate(
n = 9,
simplify = FALSE,
expr = data.frame(X = X,
Y = 3 - 0.2 * X + rnorm(Anzahl, 0, 1))
)
现在,我们绑定data.frames并使用ggplot()
。对于回归方程式,我们可以使用stat_poly_eq
包中的ggpmisc
,有关更多信息,请参见this vignette。
library(dplyr) # for the function bind_rows()
library(ggpmisc) # loads ggplot2
bind_rows(data, .id = "id") %>%
ggplot(data = ., aes(X, Y)) +
geom_point(col = "darkblue") +
geom_smooth(method = "lm",
se = FALSE,
col = "red") +
stat_poly_eq(aes(label = paste(..eq.label..)),
formula = y ~ x, parse = TRUE,
label.x.npc = "right") +
labs(title = "Regressionsanalyse",
x = "Abhängige Variable",
y = "Unabhängige Variable") +
theme_minimal() +
facet_wrap(~id, ncol = 3)