MATLAB-使用回调更新曲面图的颜色

MATLAB-使用回调更新曲面图的颜色,matlab,Matlab,我只想通过回调更改一个surface plots Cdata cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100); 我在试这个 cyl.Cdata = map200; 但这行不通。有人知道正确的方法吗 这是全部代码。 我首先创建圆柱体 map100 = getCylinderHeatMap(filename); [X_Length,Y_Circle,Z_Circle,map100] = createSurfCylinderIniti

我只想通过回调更改一个surface plots Cdata

cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
我在试这个

cyl.Cdata = map200; 
但这行不通。有人知道正确的方法吗

这是全部代码。 我首先创建圆柱体

map100 = getCylinderHeatMap(filename);

[X_Length,Y_Circle,Z_Circle,map100] = createSurfCylinderInitial(map100);
cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
splitFileName = strsplit(string(T{1,1}),'.');

title(compose("3D Cylinder Heatmap Plot" + "\n" + "Time: " + splitFileName{1,1}));
zlabel("Z-Position");
ylabel("Y-Position");
xlabel("X-Length(Cm)");
set(gca,'Ydir','reverse')
colormap(myHeatMap);
colorbar;
shading interp

Maximum_Value = 450;
Minimum_Value = 50;
caxis([Minimum_Value Maximum_Value]);
在回调中,我更新了颜色

function []= sliderCallback(b,T,myHeatMap,cyl)
value = round(b.Value);

%Testing lines load your matrix%
filename = strcat('\Users\Ali\Desktop\Documents\DataVis\Projekt\data\day\', string(T{value,1}));
map100 = getCylinderHeatMap(filename);
splitFileName = strsplit(string(T{value,1}),'.');

map100 = createSurfCylinderMapOnly(map100);
%surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
cyl.CData = map100;

title(compose("3D Cylinder Heatmap Plot" + "\n" + "Time: " + splitFileName{1,1}));
zlabel("Z-Position");
ylabel("Y-Position");
xlabel("X-Length(Cm)");
set(gca,'Ydir','reverse');
colormap(myHeatMap);
colorbar;
shading interp
% 
Maximum_Value = 450;
Minimum_Value = 50;
caxis([Minimum_Value Maximum_Value]);
end
但当我按下回调键时,什么也没发生。
我想我需要了解如何重新绘制圆柱体,但这正是我为了节省计算能力而试图避免的。只需更新彩色地图。

只要
Cdata
与旧地图数据具有相同的高度和宽度(
map100
dimensions=
map200
dimensions),就应该无任何问题地替换彩色数据。在这里,我创建了一个随机的
Cdata
彩色地图,但是当然,这个数组可以设置为您想要的任何
uint8
double
值。我建议在使用回调函数之前,确保在回调函数中定义了
Cdata

cyl = surf(X_Length,Y_Circle,Z_Circle,'Cdata',map100);
shading interp 

%Setting the surf to new test data%
[mapHeight,mapWidth] = size(map100);
map200 = rand(mapHeight,mapWidth);
cyl.CData = map200;

只要
Cdata
在正确的范围和正确的大小内,就可以正常工作<代码>Cdata必须与
map100
的大小相同。什么是“它不起作用”?它是否给出错误消息?它会使你的屏幕空白吗?它根本就没有任何效果吗?请澄清。我想我需要在新地图数据之后重新绘制圆柱体。有没有ide介绍如何做到这一点?请不要将代码作为注释发布,而是更新您的问题以进一步澄清。@Mr.Gomer我很困惑,您是否只是试图在特定轴上重新绘制?