声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 13116|回复: 18

[图像处理] 再问:如何合并多个fig曲线图形文件

[复制链接]
发表于 2006-8-3 15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
由于经常进行多个曲线的对比,需要合并多个已生成的fig格式的曲线图形文件。
不要用: plot多条曲线的方法,或是hold on进行复合
因为:1.已存在图形文件,plot 多条曲线就不行了。2.hold on 也是在生成图形文件时使用,但是图形文件已有了。
我刚学MATLAB 2个月左右,是一只小小菜鸟,请各位兄台帮帮忙!谢谢
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-8-3 23:34 | 显示全部楼层
请教各位教研室主任、教授及M友,我这个想法是不是在MATLAB里不能实现,是否有其他方法?
发表于 2006-8-4 12:26 | 显示全部楼层
可以对各个图进行句柄操作findobj,然后copyobj到一张图应该可以吧?!

[ 本帖最后由 feifeifool 于 2006-8-4 12:47 编辑 ]
发表于 2006-8-4 13:17 | 显示全部楼层
clc;clear;close all;
figure(1);x=[0:0.1:5];y=sin(x);plot(x,y);set(gcf,'name','f1');
figure(2);x=[0:0.1:5];y=10*sin(x);plot(x,y);set(gcf,'name','f2');
figure(3);x=[0:0.1:5];y=5*sin(x);plot(x,y);set(gcf,'name','f3');
%绘制图1、2、3,为了查找句柄设置图的名字为f1、f2、f3;
h1=findobj('name','f1');
h11=get(get(h1,'children'),'children');
h2=findobj('name','f2');
h22=get(get(h2,'children'),'children');
h3=findobj('name','f3');
h33=get(get(h3,'children'),'children');%查找三张图的轴的子句柄
figure;axes;建立新图!
newhandle=copyobj([h11,h22,h33],gca);
===========================================
前面finobj写的有点繁琐,不知道有没有更好的方法。
关键看你处理的图形多不多,如果太多,这种方法就效率太低了。

评分

1

查看全部评分

发表于 2006-8-4 14:33 | 显示全部楼层
非常有用,谢谢
发表于 2006-8-4 14:50 | 显示全部楼层
my way:
  1. function NewFigMerge
  2. close all;
  3. clc
  4. for i=1:5
  5.     x=linspace(0,2*pi);
  6.     y=sin(i*x);
  7.     plot(x,y);
  8.     str=['h',num2str(i),'.fig'];
  9.     hgsave(str)
  10.     close(gcf)
  11. end
  12. h1=[];
  13. for i=1:5
  14.     str=['h',num2str(i),'.fig'];
  15.     h(i)=hgload(str,struct('visible','off'));
  16.     h1=[h1,get(get(h(i),'children'),'children')];
  17. end
  18. hFig=figure;
  19. hAxes=axes;
  20. newh=copyobj(h1,hAxes);
复制代码

[ 本帖最后由 bainhome 于 2006-8-4 15:09 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-8-4 19:01 | 显示全部楼层

真心感谢!

谢谢大家对这个问题的关心和支持!
我查了两天多的资料,没有解决这个问题,便放弃了合并的想法。
昨晚熬到凌晨2点,手工完成一些曲线的合成。
刚看到大家的回帖,感激又兴奋,一定要好好学习MATLAB!
有机会争取也为论坛做一些贡献。
 楼主| 发表于 2006-8-4 19:05 | 显示全部楼层
谢谢  feifeifool 主任、bainhome ,及关注此贴的M友们
发表于 2006-8-4 20:13 | 显示全部楼层

回复 #5 qzyxm 的帖子

还是这个方法好!
发表于 2006-8-14 16:21 | 显示全部楼层
没看明白怎么应用阿,我运行了这个程序是几个曲线的合成,烦请那位给解释一下阿,我是新手。谢谢
发表于 2006-8-14 21:39 | 显示全部楼层
原帖由 微微 于 2006-8-14 16:21 发表
没看明白怎么应用阿,我运行了这个程序是几个曲线的合成,烦请那位给解释一下阿,我是新手。谢谢


这个程序没看懂?
发表于 2006-8-15 20:14 | 显示全部楼层
是阿,没怎么明白程序的意思啊,还请楼上给解释一下,程序里不是给出都是正弦曲线的合成,如果各个曲线的表达式不一样怎么办呢,不用plot 函数,怎么显示到同一个图里。或者是用一个程序,改变参数后分别得到的两个图像,怎么在一个坐标系下显示,谢谢
发表于 2006-8-16 09:43 | 显示全部楼层
第一个问题是不是下面意思?

  1. function NewFigMerge
  2. close all;
  3. clc

  4. ff{1}='sin(x)';
  5. ff{2}='x+1';
  6. ff{3}='x*5';

  7. for i=1:3
  8.     x=linspace(0,2*pi);
  9.     g=inline(ff{i});
  10.     y=g(x);
  11.     plot(x,y);
  12.     str=['h',num2str(i),'.fig'];
  13.     hgsave(str)
  14.     close(gcf)
  15. end
  16. h1=[];
  17. for i=1:3
  18.     str=['h',num2str(i),'.fig'];
  19.     h(i)=hgload(str,struct('visible','off'));
  20.     h1=[h1,get(get(h(i),'children'),'children')];
  21. end
  22. hFig=figure;
  23. hAxes=axes;
  24. newh=copyobj(h1,hAxes);
复制代码


其中:
  1. ff{1}='sin(x)';
  2. ff{2}='x+1';
  3. ff{3}='x*5';
复制代码

分别表示三个不同的函数
发表于 2006-8-16 09:46 | 显示全部楼层
第二个问题是否是下面的意思?

  1. function NewFigMerge
  2. close all;
  3. clc

  4. n=[1,4,7,3,9];

  5. for i=1:5
  6.     x=linspace(0,2*pi);
  7.     y=sin(n(i)*x);
  8.     plot(x,y);
  9.     str=['h',num2str(i),'.fig'];
  10.     hgsave(str)
  11.     close(gcf)
  12. end
  13. h1=[];
  14. for i=1:5
  15.     str=['h',num2str(i),'.fig'];
  16.     h(i)=hgload(str,struct('visible','off'));
  17.     h1=[h1,get(get(h(i),'children'),'children')];
  18. end
  19. hFig=figure;
  20. hAxes=axes;
  21. newh=copyobj(h1,hAxes);
复制代码


其中:
  1. n=[1,4,7,3,9];
复制代码


表示对于函数sin(nt)中的n选取的不同参数
发表于 2006-8-16 10:08 | 显示全部楼层
非常感谢happy 教授,明白了。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-2 12:42 , Processed in 0.082426 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表