Surf plot on GUI interface

13 Ansichten (letzte 30 Tage)
Julien Maxime
Julien Maxime am 4 Okt. 2022
Kommentiert: Simon Chan am 4 Okt. 2022
Hello,
For my project, I would like to integrate a surf plot onto a GUI interface with a slider that update the plot inside the interface.
I tested the surf plot apart and it works fined but when i try to take the same structure as "Heatmap version" of the code that worked fine i got the error:
"Error using surf
Z must be a matrix, not a scalar or vector.
Error in TimeLapseInterpolatedMap (line 72)
heatObj = surf(uip,Vq);"
Of course, I understood that putting "iup" in the first argument of surf function doesn't work but then I don't know how to integrate it with my GUI.
Con you help me ?
Thank you !
% HEATMAP VERSION (WORKING)
data = M;
fig = uifigure();
uip = uipanel(fig,'Position', [20 100 500 300]);
heatObj = heatmap(uip, data(:,:,1),'Colormap', hsv,'CellLabelColor', 'none','ColorLimits', [-500 400]);
heatObj.Title = 'Electrode Fluorescence Heatmap - Frame 1';
n = size(data,3);
uis = uislider(fig,'Position',[50 50 450 3],...
'Value',1, ...
'Limits', [1,n], ...
'MajorTicks', 0:200:n, ...
'MinorTicks', []);
%valueChangedFcn for actualisation only when cursor is dropped
uis.ValueChangingFcn = {@sliderChangingFcn, data, heatObj};
function sliderChangingFcn(~,event,data,heatObj)
% Update heatmap and title with new selection of data
value = round(event.Value);
heatObj.ColorData = data(:,:,value);
heatObj.Title = sprintf('Electrode Fluorescence Heatmap - Frame #%d',value);
end
% SURF VERSION (NOT WORKING)
data = M;
fig = uifigure();
uip = uipanel(fig,'Position', [20 100 500 300]);
[Xq,Yq] = meshgrid(1:0.1:12);
Vq = interp2(data(:,:,1),Xq, Yq, 'cubic');
heatObj = surf(uip, Vq);
n = size(data,3);
uis = uislider(fig,'Position',[50 50 450 3],...
'Value',1, ...
'Limits', [1,n], ...
'MajorTicks', 0:200:n, ...
'MinorTicks', []);
%valueChangedFcn for actualisation only when cursor is dropped
uis.ValueChangingFcn = {@sliderChangingFcn, data, heatObj};
function sliderChangingFcn(~,event,data,heatObj)
% Update heatmap and title with new selection of data
value = round(event.Value);
heatObj.ColorData = data(:,:,value);
heatObj.Title = sprintf('Electrode Fluorescence Heatmap - Frame #%d',value);
end

Antworten (1)

Simon Chan
Simon Chan am 4 Okt. 2022
Create an uiaxes inside the uipanel or you can simply use uiaxes instead of uipanel inside the uifigure.
  6 Kommentare
Julien Maxime
Julien Maxime am 4 Okt. 2022
Sorry I didnt expressed myself correctly I was looking to set the z value range. But your comment helped as I saw where to put a zlim (it put i previoulsy in the cursor loop which is useless).
Last question, do you know how to keep view point of the 3D graph during the cursor consecutives updates ? If not thank you, you already helped a lot.
Simon Chan
Simon Chan am 4 Okt. 2022
Are you looking for function view?
I don't have too much experience in 3D view and hence may not understand your needs, Sorry.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Colormaps finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by