MATLAB:更新曲面图并更改while循环中直线对象的位置

MATLAB:更新曲面图并更改while循环中直线对象的位置,matlab,plot,surface,Matlab,Plot,Surface,所以我遇到了一些错误,不确定它们来自哪里。我不会发布全部代码,但我会尽力解释(担心我会被指控剽窃) 该任务是创建一个包含两个图的窗口:曲面图和等高线图。曲面图表示由等高线图表示的地图部分的高程。该部分由等高线图上的蓝色框表示。我已经成功地绘制了曲面图和等高线图,并用蓝色框标识了第一个区域。但是,现在我需要实现一个菜单系统,其中用户输入1、2、3或4,以将框北、南、东或西移动 下面是我如何实例化这些图: fig = figure(1); [xGrid, yGrid] = meshgrid(xMet

所以我遇到了一些错误,不确定它们来自哪里。我不会发布全部代码,但我会尽力解释(担心我会被指控剽窃)

该任务是创建一个包含两个图的窗口:曲面图和等高线图。曲面图表示由等高线图表示的地图部分的高程。该部分由等高线图上的蓝色框表示。我已经成功地绘制了曲面图和等高线图,并用蓝色框标识了第一个区域。但是,现在我需要实现一个菜单系统,其中用户输入1、2、3或4,以将框北、南、东或西移动

下面是我如何实例化这些图:

fig = figure(1);
[xGrid, yGrid] = meshgrid(xMeters(xStart:xEnd), yMeters(yStart:yEnd));

%surface plot
elevationBox = ELEV(xStart:xEnd, yStart:yEnd);
surface = subplot(2, 1, 1);
surf(xGrid, yGrid, elevationBox);
axis([0 max(xGrid(:)) 0 max(yGrid(:)) min(elevationBox(:)) max(elevationBox(:))]);
axis tight;

%contour plot
elevation = ELEV;
[xMap, yMap] = meshgrid(xMeters(1:335), yMeters(1:230));
map = subplot(2, 1, 2); contour(xMap, yMap, elevation);
axis([0 max(xMeters(:)) 0 max(yMeters(:))]);
axis fill;
set(fig, 'Position', [500 100 600 700]);

right = line(xRight, xLeft);
left = line(xLeft, yLeft);
top = line(xTop, yTop);
bottom = line(xBottom, yBottom);
[xGrid, yGrid] = meshgrid(xMeters(xStart:xEnd), yMeters(yStart:yEnd));
elevationBox = ELEV(xStart:xEnd, yStart:yEnd);
subplot(2, 1, 1)
    set(surface, 'XData', xGrid, 'YData', yGrid, 'ZData', elevationBox);

drawnow;
所以一切都很好。显然,我没有包括我定义数据的部分和所有内容。在这之后是一个switch语句,它更改xLeft、yLeft等以及xStart、xEnd等的值

以下是我更新绘图的尝试:

fig = figure(1);
[xGrid, yGrid] = meshgrid(xMeters(xStart:xEnd), yMeters(yStart:yEnd));

%surface plot
elevationBox = ELEV(xStart:xEnd, yStart:yEnd);
surface = subplot(2, 1, 1);
surf(xGrid, yGrid, elevationBox);
axis([0 max(xGrid(:)) 0 max(yGrid(:)) min(elevationBox(:)) max(elevationBox(:))]);
axis tight;

%contour plot
elevation = ELEV;
[xMap, yMap] = meshgrid(xMeters(1:335), yMeters(1:230));
map = subplot(2, 1, 2); contour(xMap, yMap, elevation);
axis([0 max(xMeters(:)) 0 max(yMeters(:))]);
axis fill;
set(fig, 'Position', [500 100 600 700]);

right = line(xRight, xLeft);
left = line(xLeft, yLeft);
top = line(xTop, yTop);
bottom = line(xBottom, yBottom);
[xGrid, yGrid] = meshgrid(xMeters(xStart:xEnd), yMeters(yStart:yEnd));
elevationBox = ELEV(xStart:xEnd, yStart:yEnd);
subplot(2, 1, 1)
    set(surface, 'XData', xGrid, 'YData', yGrid, 'ZData', elevationBox);

drawnow;
我可以选择一个选项,但没有错误,但绘图不会更新,当我退出程序时,会出现以下错误:

使用matlab.graphics.axis.Axes/set时出错

Axis类上没有扩展数据属性

A9中的错误(第129行)

设置(曲面、扩展数据、xGrid)

该设置在while循环内,但在switch语句外。我也有几行使用了线对象上的set,但它们也不起作用,所以我想我应该先把重点放在这里。我想无论我做错什么都适用于这两种对象类型,但如果不让我知道


谢谢

您需要数据对象,而不是抓住轴的句柄(您称之为
曲面)。因此,抓住
surf_h=surf(…)的句柄

举个小例子:

% Generate a random surface grid
n = 10;
[x, y] = meshgrid(1:n, 1:n);
z = rand(n);

% Plot
fig_h = figure(1);
axis_h = subplot(2, 1, 1);
surf_h = surf(x,y,z);

% Modify XData
set(surf_h, 'XData', -x);
drawnow;

啊,我明白了,我想也许这就是问题所在——“子地块”是它自己的对象,那么?我在想它就像。。。我不知道,只是某种指标,我想我没想过。谢谢,我试试看!是的。您可以找到它使用的对象类型
get(handle,'type')
,并使用
get(handle)
列出它的所有属性。