在考虑你的答案之前,我想纠正我的问题: 关于你的问题:“我很好奇为什么,你之前在绘制副图之后设置参数? “实际上,我只是忘了提一些东西。正确的顺序是:
再次使用数据:
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
1st:run:plot(dose, drugA, type="b", pch=19, lty=2, col="red"
(这只是一个自我检查机制。我的意思是我首先证明自己,我正在使用默认的R设置生成图表)(Plot_1)
2nd_run:opar.1<-par(pin=c(5, 3), lwd=2, cex=1.5)
3rd_run:plot(dose, drugA, type="b", pch=19, lty=2, col="red")
(与opar.1设置相同的情节,所以我比较第一个情节和第二个情节)(Plot_2)
4th_run:par(opar.1)
(意图重置opar.1设置。)
5th_run:plot(dose, drugA, type="b", pch=19, lty=2, col="red")
(我看到我的第三个情节与我的第一个情节相同。因此,这证明par(opar.1)命令重置opar.1设置并将其转为默认设置。)(Plot_3与Plot_1相同)
但是,当我运行opar.1
然后运行6th_run plot(dose, drugA, type="b", pch=19, lty=2, col="red"
时,我没有得到与plot_2相同的情节。
总而言之,我想知道我是否因为“opar.1<-par(pin=c(5, 3), lwd=2, cex=1.5)
”命令存储“par(pin=c(5, 3), lwd=2, cex=1.5)
”设置而错误,即使我在“{{1}之后使用”par(opar.1)
“命令通过运行“opar.1”命令并重置opar.1<-par(pin=c(5, 3), lwd=2, cex=1.5)
设置我可以加载“opar.1
”设置吗?
答案 0 :(得分:1)
有两种机制可以想到,虽然你是在正确的方向开始,但你错过了最后一点。我很好奇为什么你在绘制副之前设置heightForRowAtIndexPath:
安培?为了有用,您通常需要在调用par
之前设置它们。
使用您的数据:
plot
第一种机制不需要额外的包:
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
以这种方式执行此操作的一个风险是,在对opar.1 <- par(pin = c(5, 3), lwd = 2, cex = 1.5)
plot(dose, drugA, type = "b", pch = 19, lty = 2, col = "red")
par(opar.1)
进行恢复调用之前,如果任何代码失败(导致par
或其他早期退出函数),则第二个{{可能没有调用1}}命令。 在函数(不是命令行)中,可以使用以下内容来避免此问题,特别是在stop
中提供(如@rawr所述):
par
(这只是在函数中执行时你想要的...在命令行中,你需要直接调用?par
的第一个实例。)
使用opar.1 <- par(pin = c(5, 3), lwd = 2, cex = 1.5)
on.exit(par(opar.1))
plot(dose, drugA, type = "b", pch = 19, lty = 2, col = "red")
包:
par
在withr
之前,之内和之后的library(withr)
message('## before with_par')
# ## before with_par
str(par(c('pin', 'lwd', 'cex')))
# List of 3
# $ pin: num [1:2] 5.76 5.16
# $ lwd: num 1
# $ cex: num 1
with_par(list(pin = c(5, 3), lwd = 2, cex = 1.5), {
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
message('## inside with_par')
str(par(c('pin', 'lwd', 'cex')))
})
# ## inside with_par
# List of 3
# $ pin: num [1:2] 5 3
# $ lwd: num 2
# $ cex: num 1.5
message('## after with_par')
# ## after with_par
str(par(c('pin', 'lwd', 'cex')))
# List of 3
# $ pin: num [1:2] 5.76 5.16
# $ lwd: num 1
# $ cex: num 1
和message
调用是为了证明参数仅在代码块内部更改,因此这在函数中相对安全并在命令行上。
这两种方法都提供相同的str
- 调整后的图。