jiacrack 发表于 2006-6-23 15:02

求助gui绘图问题

大家好.我做了一个简单的示波器界面,可是运行的时候,图像却不在axes空间绘图区,而是重新打开了一个figure窗口,请问怎么回事,大家帮忙啊.我以前也碰到过,难道axes不能显示动态曲线.

happy 发表于 2006-6-23 22:08

回复:(jiacrack)求助gui绘图问题

贴一下代码

jiacrack 发表于 2006-6-24 17:56

回复:(jiacrack)求助gui绘图问题

这是我所写的gui和源码,请高手分析一下,不好意思,可能我最后一次有些改动,或许运行不正常.

happy 发表于 2006-6-24 22:29

回复:(jiacrack)求助gui绘图问题

function localtimeraction(obj,event)写的有点问题<BR><BR>在plot的时候,没有设置当前的axes

yuanmm427 发表于 2006-6-25 21:19

jiacrack 发表于 2006-6-25 21:48

回复:(jiacrack)求助gui绘图问题

<P>那么怎么设置当前的axes呢?假如我用了两个axes控件,意图在axes1区域里通过按钮1用subplot画两个图形a和b,在axes2里通过按钮2显示一个另外一个图形c.请问怎样实现?<BR>会不会b出现在axes2里面,然后在按按钮2的时候,c再出现在axes2里面.请指教!谢谢</P>

yansijie 发表于 2006-7-28 20:19

在plot语句前面加上axes看看

weizhong 发表于 2006-8-21 23:04

我也遇到了这样的问题,用Axes命令指定当前axes,不行,因为subplot命令只能把figure划分成若干个axes,但对已有axes没用, 我知道subplot还可以在panel上划分,但怎么实现,我不清楚,请大侠帮忙!!

bainhome 发表于 2006-8-22 01:12

动脑子试了没有???
function tttt
clear all
clc
global hAxes1 hAxes2
figure;
set(gcf,'numbertitle','off',...
'name','在多轴间切换绘图示意',...
'units','normalized',...
'position',[.1,.15,.75,.5],...
'menubar','none',...
'defaultuicontrolfontsize',15,...
'defaultuicontrolfontname','隶书');
hAxes1=axes('units','normalized',...
'position',[.1,.6,.7,.35]);
hAxes2=axes('units','normalized',...
'position',[.1,.15,.7,.35]);
set(gcf,'currentaxes',hAxes1);
hPop=uicontrol(gcf,'style','popupmenu',...
'units','normalized',...
'position',[.83,.8,.15,.12],...
'string','图一|图二');
i=get(hPop,'value');
set(hPop,'callback',[...
'i=get(gcbo,''value'');',...
'ChangeAxes(i)']);
hMenu=uimenu(gcf,'label','画图',...
'callback','peaks');

uicontrol(gcf,'style','push',...
'units','normalized',...
'position',[.83,.6,.15,.1],...
'string','清空',...
'callback',[...
'cla reset,',...
'hAx=get(gcf,''currentaxes'');',...
'grid off,',...
    'H1=get(hAx,''title'');',...
    'delete(H1);',...
    'H2=get(hAx,''xlabel'');',...
    'delete(H2);',...
    'H3=get(hAx,''ylabel'');',...
    'delete(H3);',...
    'set(hAx,''xtick'',[],''xticklabel'',[]),',...
    'set(hAx,''ytick'',[],''yticklabel'',[]),',...
    'set(hAx,''ztick'',[],''zticklabel'',[])',...
]);
function ChangeAxes(i)
global hAxes1 hAxes2
if i==1
    set(gcf,'currentaxes',hAxes1);
else
    set(gcf,'currentaxes',hAxes2);
end

存成两个M文件,放在同一个文件夹下,运行第一个,图形如下:

[ 本帖最后由 bainhome 于 2006-8-22 01:14 编辑 ]

weizhong 发表于 2006-8-22 09:33

你没有用subplot命令呀,而且你是事先建好的axes,如果图一有两个axes,图二有三个axes,你的方法就有点笨,而且做出的界面也不好看.

bainhome 发表于 2006-8-22 11:32

随便看看GUI的帮助或者书关于figure中的parent句柄和children句柄的内容就知道,subplot命令根本就是axes命令的一个特例而已,而且是一个high-level命令,而axes的设置则是一个low-level的命令,这一点和初学者喜欢用hold on,而有一定经验的人喜欢用fig的nextplot属性是一个道理。subplot的position属性和设定children的子轴也是同一问题的两种表述。提到“事先建好的axes”说明你对句柄操作的理解还不够深入,窗口、 轴等在内存中所占的地址就是靠句柄来索引的,如果都figure;axes这样的方式写程序,怎么可能写出复杂的程序?!这才是真正的笨办法^_^
这个例子是我原来帮别人写的有关如何清除指定轴上图形而保留空轴的例子,既然能清除,当然就能画。非常欢迎提出我程序过于复杂的问题!拿完成同样功能的更简洁的程序来说话也许更有说服力。
至于“图一有两个axes,图二有三个axes”,我想也根本就是一回事儿。界面好看与否和你用axes或者subplot没任何关系。你所提到的在panel中画图,也是一个道理,把你的panel作为父句柄,将axes作为子句柄,画就是了。其实这个问题几年前吾友nostalgica就已解决,脱不开父子句柄的联系:
http://www.simwe.com/forum/thread-417075-1-1.html
http://www.simwe.com/forum/thread-385258-1-1.html
http://www.simwe.com/forum/thread-385665-1-1.html
不过我猜测你所说的panel不是uipanel的效果而是tab项目的建立,有方法如下:
1.直接在MATLAB内部建立:
http://www.simwe.com/forum/thread-426635-1-1.html
http://bbs.matwav.com/post/view?bid=12&id=360147&tpg=1&ppg=1&sty=1&age=0#360147
2.fileexchange上的例子:
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=1741&objectType=file
3.java和MALTLAB无缝集成的tab项
http://www.simwe.com/forum/thread-557158-1-1.html
都是很长时间以前的帖子,现在重看,还是颇有意思。
另外你所指的“笨”,我想是指当轴比较多的时候不容易控制,程序显得复杂。这个问题请看看GUI中关于“guidata”、“guihandles”两个命令的使用,再多的轴也是一个结构数组就搞定。我上面写的程序是一个特例,因为是一个替别人说明问题的示例程序而已。

[ 本帖最后由 bainhome 于 2006-8-22 12:04 编辑 ]

hjp91 发表于 2006-9-11 17:58

最近刚接触matlab中GUI界面制作这一部分,看了上面的帖子,感觉帮助很大。谢谢了!

ChaChing 发表于 2012-3-18 01:10

针对"初学者喜欢用hold on,而有一定经验的人喜欢用fig的nextplot属性", 个人是有点汗! 因个人还是常用hold on:@L

挖到宝似的学习了下!:@)

满天风云 发表于 2012-3-19 18:31

学习了:@)
页: [1]
查看完整版本: 求助gui绘图问题