在R中的绘图标题上添加线性函数系数

时间:2018-07-07 10:01:48

标签: r plot

我正在解决我的R在线课程的任务。任务是创建一个与以下内容完全相同的图:

Goal-Plot

将使用给定的随机数函数和set.seed(1423)对80个观测值进行测试。代码如下:

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)
  plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue")
  axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
  axis(side=2,at=c(-2,0,2,4),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()
}
Reg(80)

并生成以下情节:

Created plot

我有两个问题:

1)如何更改图的标题,以在第一张图中显示系数的方式显示系数?

2)可以强制轴只显示偶数(这也是任务的一部分,在代码中,我已将y轴定义为包含-2、0、2、4,但是我可以概括一下,我只希望y轴为偶数吗?

欢迎提出任何其他建议以使情节尽可能相同!

2 个答案:

答案 0 :(得分:1)

回答您的问题:

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)
  plot(X, Y, axes = F, xlab = NA, ylab = NA, cex = 0.8, pch = 24, bg = "darkblue")
  axis(side = 1, at = unique(round(X)[round(X) %% 5 == 0]), col = NA, cex.axis = 1.2)
  axis(side = 2, at = unique(round(Y)[round(Y) %% 2 == 0]), col = NA, las = 1, cex.axis = 1.2)
  mtext(side = 3, font = 2, cex = 1.1, 
        text = "Regressionanalyse \n Gleichung: y(x)= 2.89 -0.21 x")
  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()
}
Reg(80)

答案 1 :(得分:1)

如果您正在寻找自动化程度较低的版本,则可以尝试以下逻辑:

逻辑

1)要捕获回归方程:我有一个方程模型,然后使用coef函数捕获系数并将其粘贴到标题上。

2)为了自动使用y轴上的序列,我使用了地板和天花板功能w.r.t Y轴。

注意:由于本地设置不同,我无法在输出中正确呈现(ä)字符。为了解决我使用的stri_trans_general软件包中的stringi,如果您的语言环境设置允许您呈现这些字符,则可以完全避免此步骤。

    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)
    ymin <- ifelse(min(Y) < 0 , floor(min(Y)), ceiling(min(Y)))
    ymax <- ifelse(min(Y) > 0 , ceiling(max(Y)), floor(max(Y)))

    model <- lm(Y ~ X, data = data.frame(X = X, Y=Y))
    object <- paste0('Y(x) = ', round(coef(model)[[2]],2), '*X', ' + ', 
                     round(coef(model)[[1]],2)) ##This is the object that should be pasted in main
    plot(X,Y,axes=F,xlab=NA,ylab=NA,cex=0.8,pch=24,bg="darkblue", 
         main=paste0("Regression Analysis \n",object)) #You can add any text here, note the new line in case you want something in next line.
    axis(side=1,at=c(0,5,10,15,20),col=NA,cex.axis=1.2)
    axis(side=2, at=c(seq(((ymin %% 2) == 0)*min(ymin) + ((ymin %% 2) != 0)*(ymin-1), 
                          ((ymax %% 2) == 0)*max(ymax) + ((ymax %% 2) != 0)*(ymax+1), 2)), 
         col=NA, las=1, cex.axis=1.2) # does not work
    mtext(side=1,stringi::stri_trans_general("Unabhängige Variable","zh"),line=2,cex=1.1)
    mtext(side=2,stringi::stri_trans_general("Abhängige Variable","zh"),line=2,cex=1.1)
    abline(lm(Y~X),col="red",lwd=2)
    grid()
}

输出

enter image description here