使用Timer在GUI中更新图表会创建一个新的数字&轴

时间:2016-08-11 07:49:57

标签: matlab user-interface timer matlab-guide

我正在尝试制作一个程序,在一段时间内显示来自经纪人的实时图表数据。这段时间可以是例如5秒或15分钟。

我制作了一个GUI和一个计时器。程序启动时,第一个绘图将转到GUI中的.dinfo { position: relative; bottom: 90px; right: 50px !important; } 。但是,所有更新的图(来自计时器)都会出现一个新图(只有一个),但不会进入图中的图。

附上一些代码:

这是在GUI .m文件的axes

openingFcn

功能handles.timer = timer(... 'ExecutionMode', 'fixedRate', ... % Run timer repeatedly 'Period', 5, ... % Initial period is 5 sec. 'TimerFcn', {@updateChart,hObject}); % Specify callback guidata(hObject,handles) axes(handles.axes1); candle(highBid, lowBid, closeBid, openBid); start(handles.timer);

updateChart

有关如何在GUI窗口更新图表的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。事实上,任何类型的高级绘图功能都会发生同样的事情。我不得不使用plot函数重现您的问题,行为如您所述。

简答:

您必须将 HandleVisibility figure设置为on(而不是默认设置callback)。如果您正在使用GUIDE,则必须直接在图属性检查器中从GUIDE设置它(出于某些不明原因,如果在初始化代码中稍后设置它,则它不起作用):

enter image description here

此设置会让timer回调可以看到figure子对象,因此plot命令不会决定创建一组新的axes& figure面对隐形的人时。{/ p>

注1:

当使用正确的目标句柄指定axes命令时,总是在右plot刷新绘图。对于支持在参数中传递目标axes的图形函数,语法为:

% infallible syntax (when allowed)
plot( data2plot , 'Parent',targetAxesHandle)

总是优于您使用的那个(设置axes有效,然后在当前有效axes中绘图)

% this syntax may fail to plot in the right "axes" somtimes, as you observed
axes(targetAxesHandle);
plot( data2plot )

现在阅读特定绘图函数candle的文档,我没有找到可以传递axes句柄的线索,所以对于这种类型的函数,你必须求助于在这篇文章的顶部给出的解决方案。 但是,如果您曾向工具箱的编写者提供一些反馈,我强烈建议告诉他们这个重要的缺失功能。

注2:

您不必在每个情节之前致电hold on。如果你知道你将永远"添加"在图中,您可以在初始化代码中一劳永逸地设置它:

set(handles.axes1,'Nextplot','add') % set "Hold on" permanently for "axes1"

如果你想删除锁定的保留,只需设置:

set(handles.axes1,'Nextplot','replace') % set "Hold off" permanently for "axes1"