matlab xdata ydata,MATLAB - 動態更新線條處理'XData和YData的最佳方式?

我正在收集數據並實時繪製數據。數據由動作捕捉系統生成。我有一個類DynamicDataset,它只是一個包含2列矩陣的包裝(雖然它比這更細緻),但是添加了新數據的事件通知程序;另一個類DynamicPlotter,用於監聽添加數據的事件並動態更新繪圖。相應的代碼片段:MATLAB - 動態更新線條處理'XData和YData的最佳方式?

classdef DynamicDataset < handle

properties

newestData = [];

data = []

end

events

DataAdded

end

methods

function append(obj, val)

obj.data(end+1,:) = val;

obj.newestData = val;

notify(obj, 'DataAdded');

end

end

end

classdef DynamicPlotter < dynamicprops

properties

FH %# figure handle

AH %# axes handle

LH %# array of line handles - may have multiple lines on the plot

dynProps = {} %# cell array of dynamic property names -

%# use to access individual datasets

end

methods

function obj = DynamicPlotter(props) %# props is a cell array of dynamic

%# properties to store information

for i = 1:length(props)

addprop(obj, props{i});

obj.(props{i}) = DynamicDataset;

obj.dynProps = [obj.dynProps props{i}];

addlistener(obj.(props{i}), 'DataAdded', @obj.updatePlot(i));

end

obj.createBlankPlot();

end

function createBlankPlot(obj)

obj.FH = figure;

obj.AH = axes;

hold all;

for i = 1:length(obj.dynProps)

obj.LH(i) = plot(nan); %# only used to produce a line handle

set(obj.LH(i), 'XData', [], 'YData', []);

end

end

function updatePlot(obj, propNum)

X = get(obj.LH(propNum), 'XData');

Y = get(obj.LH(propNum), 'YData');

X(end+1) = obj.(dynProps{propNum}).newestData(1);

Y(end+1) = obj.(dynProps{propNum}).newestData(2);

set(obj.LH(propNum), 'XData', X, 'YData', Y);

end

end

end

基於MATLAB的代碼資料,在updatePlot()的set命令是相當昂貴的。我想知道是否有更好的方法來繪製個人點,因爲他們來了?理想情況下,我會將單點推入XData和YData,並只畫出這一點,但我不知道這是否可能。

請注意,可能有多個lineseries對象(即在同一個plot上有多個圖形); plot()需要一個軸手柄作爲參數,所以它不會考慮先前繪製的線手柄的屬性(或者是否有辦法讓它這樣做?我以爲只是在做plot(x,y);hold all;,但每次都會給我單獨的線條手柄,每個手柄對應一個點。

這可能是因爲沒有辦法讓繪圖速度更快,但我想我會問。

編輯:更新OP與我正在使用的實際代碼,而不是使用一個通用的例子,這是誤解。

+0

我不知道你是否已經看到了這一點,但看看http://stackoverflow.com/questions/1693429/matlab-oop-is-it-slow-or-am-我做錯了什麼。基本上在matlab中使用類一般會導致性能不佳 –

+0

謝謝,我以前見過。我的項目需要使用類,原因是我不會進入,所以沒有任何解決方法......但是'set'調用會很慢,因爲它是在方法內部調用的? –

+0

@ strictrude27:你應該改正addlistener行爲:'addlistener(obj。(props {i}),'DataAdded',@(src,ev)obj.updatePlot(i));'。你也可能想在'updatePlot'函數末尾添加'drawnow' –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值