楼主: cescelia
32571 18

[问答] R语言 for循环中如何在plot的时候把每次循环的结果都画出来 [推广有奖]

  • 2关注
  • 2粉丝

硕士生

18%

还不是VIP/贵宾

-

威望
0
论坛币
178 个
通用积分
3.0638
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2570 点
帖子
80
精华
0
在线时间
164 小时
注册时间
2010-11-3
最后登录
2020-12-7

楼主
cescelia 在职认证  发表于 2016-6-18 11:27:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题

在学习R语言的时候遇到一个问题,matlab中for循环中每次循环的结果作图都可以用hold on来存储上一次画图结果,但是在R中遇到一个问题,就是没有hold on这个用法,除此之外,看到论坛里面有建议用par(new=TRUE)的,试了一下,还是不行,用par函数的话,其实是在原有的x坐标和y坐标上面覆盖作图,这样x坐标和y坐标没有根据循环每次得到的结果进行延伸。如果直接在for循环中plot的话,plot出来的就是循环的最后一个值,想请问一下有没有办法可以保留每一次循环的plot。

举个例子:
c=matrix(1:16,4)
c
for (i in 1:4){
     x=c[,i]
     y=c[i,]
    plot(x,y,"b")
}

捕获.PNG

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:for循环 plot R语言 For MATLAB R语言 for循环plot 保存每次结果

回帖推荐

zhou1_20 发表于12楼  查看完整内容

这样应该就可以了

沙发
suzhzh 发表于 2016-6-18 14:38:26
There are 4 plots generated.
I think you should output to an external doc to reach your aim.

藤椅
helixcn 发表于 2016-6-18 21:05:13
试试

c = matrix(1:16,4)
for (i in 1:4){
     x = c[,i]
     y = c[i,]
     
    tiff(filename = paste("plot_",i,".tiff", sep = ""),
         width = 3200, height = 3200, units = "px", pointsize = 12,
         compression = "lzw", res = 400)
    plot(x, y, "b")
    dev.off()
}

板凳
zhou1_20 发表于 2016-6-18 22:40:05
  1. c = matrix(1:16,4)
  2. y = c(c)
  3. x = c(t(c))
  4. z = rep(c(1:4),rep(4,4))
  5. yx=data.frame(x=x,y=y,z=z)
  6. require(ggplot2)
  7. ggplot(yx, aes(x, y, colour = factor(z) ,
  8.                linetype = factor(z),
  9.                group = z) ,
  10.                shape=factor(z)) +
  11.   geom_point(aes(shape=factor(z))) +
  12.   scale_shape(solid = FALSE)+
  13.   geom_line()
复制代码
Rplot01.png

报纸
cescelia 在职认证  发表于 2016-6-19 19:52:16
suzhzh 发表于 2016-6-18 14:38
There are 4 plots generated.
I think you should output to an external doc to reach your aim.
Hi, suzhzh, Thank you so much for your answer.

Yes, there are four plots in my loop, I need to put them in the same graph, I am not sure how to make it.

地板
cescelia 在职认证  发表于 2016-6-19 19:56:49
zhou1_20 发表于 2016-6-18 22:40
Hi, zhou1_20,您好!
非常感谢您的回复,但是我要的结果好像不是这样的,每一个x轴是4个单位,当x[1]=(1,2,3,4),y=(1,5,9,13),您这个图结果是基于x=y吗?

7
cescelia 在职认证  发表于 2016-6-19 19:58:05
helixcn 发表于 2016-6-18 21:05
试试

c = matrix(1:16,4)
Hi, helixcn

您好!非常感谢您的回答。
但是我复制了您的代码,运行结果没有图片出来,能麻烦您帮忙解答一下吗?谢谢

8
helixcn 发表于 2016-6-19 20:00:00
在 getwd() 文件夹下查看图片

9
cescelia 在职认证  发表于 2016-6-19 20:09:14
helixcn 发表于 2016-6-19 20:00
在 getwd() 文件夹下查看图片
谢谢您!

这样的话保存了每一次循环的结果,但是好像不是我之前想要的结果,可能我自己在一开始问题描述的时候没有说清楚,我试着重新说一下哈~~麻烦您帮忙看一下该怎样解决!

其实是这样的:

每一次循环会得到一个x值,一个y值,我需要把每次循环的x值和y值都plot到同一个图片中哈~~,上面的例子只是我简化的结果,实际上x值是一个递增的数列跟例子中的x值类型差不多,y值是一个随机数。

这样会不会清楚一点呢?

10
马甲1号 发表于 2016-6-19 22:12:45
R的par=T和matlab的hold on不一样,新的plot不继承原来plot的座标轴信息,因此需要用xlim和ylim参数预先订好x轴和y轴的范围。
真要按matlab的习惯画图的话最好还是用python的matplotlib。
  1. c=matrix(1:16,4)
  2. c
  3. for (i in 1:4){
  4.      x=c[,i]
  5.      y=c[i,]
  6.     par(new=T)
  7.     plot(x,y,"b",xlim=c(min(c)-1,max(c)+1), ylim=c(min(c)-1,max(c)+1))
  8. }
复制代码

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

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