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

时间:2020-11-01 16:30:42

标签: matlab

我只想通过回调更改表面图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

当我按回叫时,什么也没有发生。 我认为我需要一些如何重画圆柱体的方法,但是那是我首先要避免的方法,以节省计算能力。并只更新颜色图。

1 个答案:

答案 0 :(得分:1)

只要Cdata具有与旧地图数据相同的高度和宽度(map100尺寸= map200尺寸),就应该替换颜色数据而不会出现任何问题。在这里,我创建了一个随机的Cdata色彩映射表,但是当然,该数组可以设置为您想要的任何uint8double值。我建议您在使用之前确保在回调函数中定义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;