每次添加新數據時,您都可以創建一次(每個繪圖對象)並將其保存到變量中,而不是每次添加新數據時創建一個新的光標對象。然後在循環內部可以更新位置。
set(cursorMode, 'Enable', 'on')
%// Create all of your data cursors once
for k = 1:numel(dataObjs)
datacursors(k) = cursorMode.createDatatip(dataObjs(k));
end
%// Now when you add new data
for k = 1 : numel(dataObjs)
X{k}(end+1) = newX{k};
Y{k}(end+1) = newY{k};
set(dataObjs(k), 'XData', X{k});
set(dataObjs(k), 'YData', Y{k});
%// Update annotation position
datacursors(k).Cursor.Position = [newX{k}, newY{k} 0];
end
而對於一個完整的例子的目的:
hfig = figure();
data = rand(5,4);
hplots = plot(data);
cursorMode = datacursormode(hfig);
for k = 1:numel(hplots)
datacursors(k) = cursorMode.createDatatip(hplots(k));
end
for k = 1:size(data, 1)
for m = 1:numel(hplots)
set(datacursors(m), 'Position', [k, data(k,m)])
end
end
更新
作爲替代你能使用findall
實際定位數據光標的給定情節。這唯一的缺點是它增加了每次想要更新數據遊標時必須查找數據遊標的開銷。
datacursor = findall(ancestor(hplots(k), 'axes'), 'DataSource', hplots(k));
另一種選擇
,而不是一個變量中存儲的一切,你可以在數據存儲光標在UserData
財產的陰謀對象本身。
for k = 1:numel(hplots)
set(hplots(k), 'UserData', cursorMode.createDatatip(hplots(k)))
end
然後使用它:
set(get(hplots(k), 'UserData'), 'Position', [x, y, 0])
偉大的工作!感謝代碼共享 – 16per9
這不是我的問題,我只是越來越有經驗的matlab和這個代碼是好的繪圖:) – 16per9
@ user2205242哎呀!對於那個很抱歉。 – Suever