【发布时间】:2018-04-19 22:43:23
【问题描述】:
我有一个 MATLAB GUI,它调用外部函数来绘制图形 (make_ethogram_plot)。
我们的想法是有一个外部图形,该图形会随着图形的输出值不断更新。每次数据更新时,它都应该重新绘制值,它以 ~10 Hz 的频率更新。我选择了gramm (https://github.com/piermorel/gramm/tree/master/%40gramm),因为制作光栅图真的很容易。
这是被调用的函数。我有问题
1) 使其仅在具有特定名称的父图形中更新,而不是在 GUI(即活动图形)中绘制。
2)让它不会崩溃。它会以 10 Hz 的频率打开多个图形或打开或关闭同一个图形,直到崩溃。
在这个配置中,它给出了错误,因为它在第一次绘图后没有找到g。使 g 、 f 和 p1 成为全局变量会使其崩溃(每次调用时都会打开)
function make_ethogram_plot(datastructure)
% if the figure doesn't exists create it
if(isempty(findobj(0, 'Name', 'My_gramm_ethogram')))
f=figure('Name', 'My_gramm_ethogram');
p1 = uipanel('Parent',f,'BackgroundColor',[1 1 1],'BorderType','none');
g = gramm('x', datastructure.final_data.frameID, 'color', categorical(datastructure.final_data.behavior));
g.geom_raster();
g.set_parent(p1);
g.draw()
else
% defining f,p1, g here (or having them global) works but crashes
% due to refresh rate
g.update()
end
end
【问题讨论】:
-
datastructure中有什么内容?如果不知道生成什么类型的图、它有多少数据点等,就很难复制这个问题。 -
@CrisLuengo
datastructure是一个包含final_data表的结构,该表有约 10000 行 x 2 列 -
所以这会生成一个线图?
-
确实,如果我使用数据结构从控制台逐步运行它,此函数会生成准确的绘图(假设它找到
f、p1和g)。它由 GUI 中的循环/侦听器函数调用
标签: matlab plot matlab-figure