楼主: 耕耘使者
17134 12

[问答] 绘图时par()的作用置疑 [推广有奖]

贵宾

已卖:5006份资源

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1811021 个
通用积分
171.7911
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93428 点
帖子
4549
精华
0
在线时间
2848 小时
注册时间
2006-4-6
最后登录
2025-7-12

楼主
耕耘使者 发表于 2013-10-4 10:39:15 |AI写论文
10论坛币
在做图时,无意中发现了这样一个问题:

  1. op<-par(bg="light blue")
  2. plot(c(-2, 2), c(-2, 2))
  3. rect(-2, -2, 1, 1, col="cornsilk")
  4. par(op)
复制代码



发现,最后一行(par(op)无论加与不加,结果都是一样的,都出现下图:
TT截图未命名.bmp


怪哉怪哉!

最佳答案

kaifengedu 查看完整内容

这个不怪,不管加不加最后一行都会出现你所给的四幅图,但是你没理解par(op) 的作用,他是把当前图形设备恢复到op
已有 1 人评分热心指数 收起 理由
qoiqpwqr + 1 鼓励积极发帖讨论

总评分: 热心指数 + 1   查看全部评分

沙发
kaifengedu 发表于 2013-10-4 10:39:16
这个不怪,不管加不加最后一行都会出现你所给的四幅图,但是你没理解par(op)
的作用,他是把当前图形设备恢复到op <- par(mfrow=c(2,2), mar=c(4,4,3,2))
之前的设置.

为了方便你理解,你可以运行一下.

  1. library(Zelig)d <- data.frame(  
  2.   y = crabs$sp,  
  3.   x1 = crabs$FL,  
  4.   x2 = crabs$RW)r <- zelig( y ~ x1 + x2, model="probit", data=d )op <- par(mfrow=c(2,2), mar=c(4,4,3,2))plot(r) plot(1:10)
复制代码

就能明白,先运行plot(r)看一下图形
然后再运行plot(1:10)

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
耕耘使者 发表于 2013-10-4 20:45:19
kaifengedu 发表于 2013-10-4 10:39
这个不怪,不管加不加最后一行都会出现你所给的四幅图,但是你没理解par(op)
的作用,他是把当前图形设备恢复 ...
我好像明白了,第一个op<-par(),是设定图形参数,而第二个par(op)表面意思是再设一次,实际功能是恢复到原来状态,是这样么?老师?
尝试了一下,好像我理解的还是错误,见下面运行:
par(bg="light gray")
plot(c(-2,  2), c(-2,  2))  
rect(-2,  -2,  1,  1,  col="cornsilk")
par(bg="light gray")
运行之后,发现还是没有恢复。我的疑惑是:非得把par()赋值给一个名称,如op(我尝试了,用o也可以),才可以吗?死记当然可以,就是有些不理解。
非常感谢您!

板凳
kaifengedu 发表于 2013-10-4 21:14:26
耕耘使者 发表于 2013-10-4 20:45
我好像明白了,第一个op
你的没恢复是什么意思?
你看你的两条命令都是
par(bg="light gray")
"我好像明白了,第一个op<-par(),是设定图形参数,而第二个par(op)表面意思是再设一次,实际功能是恢复到原来状态,是这样么?老师?"
这个理解是对的.
"我的疑惑是:非得把par()赋值给一个名称,如op(我尝试了,用o也可以),才可以吗?死记当然可以,就是有些不理解。"
其实把par() 赋值给一个名称.个人感觉也不太需要怎么记啊.
就相当于开始i=0,你中间赋值了i=1,想用i=0时间再恢复一下即可.

报纸
tmdxyz 发表于 2013-10-5 05:54:31
天哪,楼主竟然有这么多论坛币

地板
耕耘使者 发表于 2013-10-5 08:26:40
kaifengedu 发表于 2013-10-4 21:14
你的没恢复是什么意思?
你看你的两条命令都是
par(bg="light gray")
副教授,我理解的还是不对,看下面代码,恢复不了了!!
op<-par(bg="light blue")
plot(c(-2,  2), c(-2,  2))  
rect(-2,  -2,  1,  1,  col="cornsilk")
par(op)
plot(1:10)

7
耕耘使者 发表于 2013-10-5 08:28:14
tmdxyz 发表于 2013-10-5 05:54
天哪,楼主竟然有这么多论坛币
这是原始资本积累。从入坛太久了,而开始时,赚取论坛币比较容易。
当然,容易也不相对的,我上传了大量的数据年鉴。

8
kaifengedu 发表于 2013-10-5 09:02:02
耕耘使者 发表于 2013-10-5 08:26
副教授,我理解的还是不对,看下面代码,恢复不了了!!
op
我给你个截图你看看吧,我不知道你哪里没理解,呵呵.
运行了
  1. op<-par(bg="light blue")
  2. plot(c(-2,  2), c(-2,  2))  
  3. rect(-2,  -2,  1,  1,  col="cornsilk")
复制代码


生成了图像
Rplot03.png

运行
  1. par(op)
  2. plot(1:10)
复制代码


生成了

Rplot04.png

BTW:以后如果方便请把代码放在代码框里方便别人复制粘贴,呵呵.

已有 1 人评分学术水平 热心指数 收起 理由
耕耘使者 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

9
耕耘使者 发表于 2013-10-5 12:39:40
kaifengedu 发表于 2013-10-5 09:02
我给你个截图你看看吧,我不知道你哪里没理解,呵呵.
运行了
又尝试了一下,没有问题了。上次软件出了bug。R就是这点不好,有时莫名其妙的出bug,关闭重新做又好了。
多谢!
顺便请教,怎样把代码放在代码框中?

10
kaifengedu 发表于 2013-10-5 13:23:03
耕耘使者 发表于 2013-10-5 12:39
又尝试了一下,没有问题了。上次软件出了bug。R就是这点不好,有时莫名其妙的出bug,关闭重新做又好了。
...
你可以用回复里笑脸旁边的<>,一点就可以了.
已有 1 人评分学术水平 热心指数 收起 理由
耕耘使者 + 1 + 1 多谢!

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-20 14:38