`abline`在使用'par()生成回归诊断图时不添加线`

`abline`在使用'par()生成回归诊断图时不添加线`,r,plot,regression,linear-regression,R,Plot,Regression,Linear Regression,我正在使用par()函数绘制一个多面板绘图,我想在第二个绘图中添加一条直线 par(mfrow = c(2, 2)) hist(model$residuals) # model is some predefined lm object plot((model$residuals + model$fitted.values) ~ model$fitted.values) # Now I want to add a line (or points or curve) to only above pl

我正在使用
par()
函数绘制一个多面板绘图,我想在第二个绘图中添加一条直线

par(mfrow = c(2, 2))
hist(model$residuals) # model is some predefined lm object
plot((model$residuals + model$fitted.values) ~ model$fitted.values)
# Now I want to add a line (or points or curve) to only above plot like
abline(model$coef) # but this doesn't work
qqnorm(model$residuals) # some more plots, doesn't matter which

有什么帮助吗?我不打算使用
ggplot()
,我想让它保持简单。

问题不在于你认为par的问题;这仅仅是因为您向
abline
提供了不适当的值。您多次更改问题,表明您不知道应为不同的几个绘图添加哪条线。我现在将澄清这一点,假设
mod
是您的合适型号

残差v.s.安装

with(mod, plot(fitted.values, residuals))
abline(h = 0)  ## residuals are centred, so we want a horizontal line
符合v.s.响应要求

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)  ## perfect fit has `fitted = response`, so we want line `y = x`
v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`, for add regression curve
set.seed(0)
xx <- rnorm(100)
yy <- 1.3 * xx - 0.2 + rnorm(100, sd = 0.5)
mod <- lm(yy ~ xx)
rm(xx, yy)

par(mfrow = c(2,2))

with(mod, plot(fitted.values, residuals))
abline(h = 0)

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)

v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`
带有回归线的散点图

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)  ## perfect fit has `fitted = response`, so we want line `y = x`
v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`, for add regression curve
set.seed(0)
xx <- rnorm(100)
yy <- 1.3 * xx - 0.2 + rnorm(100, sd = 0.5)
mod <- lm(yy ~ xx)
rm(xx, yy)

par(mfrow = c(2,2))

with(mod, plot(fitted.values, residuals))
abline(h = 0)

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)

v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`

v正如@ZheyuanLi所说,很难准确地看到你想要什么。您的一些问题似乎是由于添加了与现有打印限制不重叠的线

model <- lm(Illiteracy~Income,data.frame(state.x77))
par(mfrow = c(2, 2))
hist(model$residuals)
plot(model$residuals ~ model$fitted.values)
plot((model$residuals+model$fitted.values) ~ model$fitted.values)
如果要返回并将元素添加到上一帧,该怎么办?这有点难。将绘图重置为第1行第2列:这不会将我们置于上一个绘图的绘图框内,它只是让我们准备在此子框中绘图

par(mfg=c(1,2))
我们希望再次设置相同的绘图框架:我们将通过再次绘制相同的内容(确保相同的轴限制等)进行欺骗,但关闭绘图的所有方面(
new=FALSE
意味着我们不会清空上一个绘图):


基本图形实际上不是为修改现有绘图而设计的;如果你想做很多工作,你应该研究
网格
图形系统(它是
晶格
ggplot2
图形的基础)。

你的代码可以按你的意愿工作
abline()
将仅将线条添加到第二个绘图中。如果要使用
ggplot
应从头开始使用。相反,您是从命令开始的,如
hist
plot
,它们与ggplot命令一起使用。@phynfo我说我不打算使用ggplot()。但无论如何,我想我已经找到了答案。(1)你可能正在寻找
par(“mfg”)
;(2) 在本例中,您的
abline()
函数“不起作用”,因为(a)
abline()
不采用2元素向量;(b) 如果使用了
a直线(模型)
,该直线将不会显示在绘图上,因为绘图比例已关闭<代码>基线(h=0)
确实有效,例如example@BenBolker是的,当我直接使用直线或直线函数作为模型回归直线时,直线不会显示。在那种情况下我该怎么办?谢谢你的回答,但我恐怕要告诉你,你没有理解我的问题。这不是关于我添加到模型中的哪一行。我知道哪一行是正确的。显然,后来我又回去给我已经绘制的绘图面板添加了一行,因此该行没有被打印出来。Ben Bolker的回答正确地解释了这一点。我再次请求您再次仔细检查整个问题。问题很简单-在多面板绘图设置中,我观察到线条没有添加到我想要的特定绘图中,为什么。本答对了。这是由于基本图形的相加性。感谢@BenBolker,当我试图返回并向上一个面板添加一行时,正是图形的相加性阻止了线条的添加。当我连续运行代码时,它们看起来很好。我想再次告诉大家,问题不在于哪一行,而在于没有添加哪一行。谢谢你的时间和耐心。好的,我很高兴你的问题解决了。老实说,虽然,整个过程将大大简化,如果你提供了一个。。。我能够猜对,但代码中的一些无关紧要的问题也很容易让我分心。