【发布时间】:2016-08-11 07:49:57
【问题描述】:
我正在尝试制作一个程序,在一段时间内显示一次来自经纪人的实时图表数据。例如,时间段可以是 5 秒或 15 分钟。
我已经制作了一个 GUI 和一个计时器。当程序启动时,第一个绘图转到 GUI 中的axes。但是,所有更新的绘图(来自计时器)都进入一个新图形(只有一个),而不是 GUI 中的图形。
附上一些代码:
这是在 GUI .m 文件的 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:
function updateChart(hObject,eventdata,hfigure)
% Get new data, one candle at a time
...
% How many times the chart has already updated
handles = guidata(hfigure);
k = handles.timer.TasksExecuted;
...
% Draw (update) the chart
hold on;
axes(handles.axes1);
candle(highBid, lowBid, closeBid, openBid); % this will be plotted in a new figure !
关于如何在 GUI 窗口更新图表有什么建议吗?
【问题讨论】:
-
开始,在
updateChart函数中,将声明axes(handles.axes1);在调用candle(...)之前。 -
感谢您的回复,我进行了编辑。我还更正了第一条蜡烛线,因为它没有返回句柄,所以handles.chart = candle(..) 没有用。这是意外留下的,因为之前我尝试了返回句柄的 highlow。
-
我忘了说它没有帮助。图形仍会在 gui 上方弹出,并且程序会继续执行该图形而不是 gui 中的图形。
-
我没有金融工具箱,所以无法重现您的问题。我建议打开
candle.m函数并尝试找出如何选择axes进行绘图... -
您可以使用任何其他绘图命令,例如命令“绘图”本身来重现问题。在发布到 Stackoverflow 之前,我从以下链接获得了一些帮助:se.mathworks.com/matlabcentral/answers/…。但是,我仍然无法更新 GUIDE 轴上的任何绘图。我进行的每一次试验都会打开一个新图并开始更新该图。
标签: matlab user-interface timer matlab-guide