Это продолжение с вопроса уже размещено here. Я использовал метод, предложенный Энди. Но, похоже, существует ограничение. команда set(handle, 'XData', x)
, похоже, работает до тех пор, пока x является вектором. что, если x - матрица?Как обновить данные графика в Matlab? part - 2
Позвольте мне объяснить на примере. Скажем, мы хотим нарисовать 3 прямоугольника, вершины которых заданы матрицами x_vals
(матрица 5,3) и y_vals
(матрица 5,3). Команда, которая будет использоваться для построения, - это просто plot(x,y)
.
Теперь мы хотим обновить приведенный выше график. На этот раз мы хотим нарисовать 4 прямоугольника. вершины которых находятся в матрицах x_new
(матрица 5,4) и y_new
(5,4 матрицы), которые мы получаем после некоторых расчетов. Теперь с помощью команды set(handle, 'XData', x, 'YData', y)
после обновления x
и y
с новыми значений приводит к ошибке, которая гласит
Error using set Value must be a column or row vector
Любой способ решить эту проблему?
function [] = visualizeXYZ_struct_v3(super_struct, start_frame, end_frame)
% create first instance
no_objs = length(super_struct(1).result);
x = zeros(1,3000);
y = zeros(1,3000);
box_x = zeros(5, no_objs);
box_y = zeros(5, no_objs);
fp = 1;
% cascade values across structures in a frame so it can be plot at once;
for i = 1:1:no_objs
XYZ = super_struct(1).result(i).point_xyz;
[r,~] = size(XYZ);
x(fp:fp+r-1) = XYZ(:,1);
y(fp:fp+r-1) = XYZ(:,2);
% z(fp:fp+r-1) = xyz):,3);
fp = fp + r;
c = super_struct(1).result(i).box;
box_x(:,i) = c(:,1);
box_y(:,i) = c(:,2);
end
x(fp:end) = [];
y(fp:end) = [];
fig = figure('position', [50 50 1280 720]);
hScatter = scatter(x,y,1);
hold all
hPlot = plot(box_x,box_y,'r');
axis([-10000, 10000, -10000, 10000])
xlabel('X axis');
ylabel('Y axis');
hold off
grid off
title('Filtered Frame');
tic
for num = start_frame:1:end_frame
no_objs = length(super_struct(num).result);
x = zeros(1,3000);
y = zeros(1,3000);
box_x = zeros(5, no_objs);
box_y = zeros(5, no_objs);
fp = 1;
% cascade values accross structures in a frame so it can be plot at once;
for i = 1:1:no_objs
XYZ = super_struct(num).result(i).point_xyz;
[r,~] = size(XYZ);
x(fp:fp+r-1) = XYZ(:,1);
y(fp:fp+r-1) = XYZ(:,2);
fp = fp + r;
c = super_struct(num).result(i).box;
box_x(:,i) = c(:,1);
box_y(:,i) = c(:,2);
end
x(fp:end) = [];
y(fp:end) = [];
set(hScatter, 'XData', x, 'YData', y);
set(hPlot, 'XData', box_x, 'YData', box_y); % This is where the error occurs
end
toc
end
@ Andrey Просто хотел узнать, был ли вопрос ясен и имеет смысл – bvk