Probing a plot based on colormap information

How can I probe a plot with colormap data?
As you see, in this case, it only shows the xyz coordinates which is not really useful. I want to be able to see the colormap value (between 0 and 1).
Any ideas? I am using the trisurf function.

 Accepted Answer

Try function datatip & dataTipTextRow if your MATLAB version is after 2019b.
[x,y] = meshgrid(1:15,1:15);
z = peaks(15);
T = delaunay(x,y);
s = trisurf(T,x,y,z);
dt = datatip(s);
s.DataTipTemplate.DataTipRows(end+1) = dataTipTextRow('Colormap Value',T,'%.1f');

9 Comments

Thanks, but I get the following error:
Error using matlab.graphics.datatip.DataTipTemplate/set.DataTipRows
Value must be compatible with the data source.
In my code, "flow12" has the same dimensions as F. I think (?) this is the problem. Basically I have a value assigned to each face, rather than each vertex.
s = trisurf(F,P(:,1),P(:,2),P(:,3), flow12, 'Parent', app.UIAxes2_10);
c = colorbar(app.UIAxes2_10);
caxis(app.UIAxes2_10,[0.333 1]);
colormap(app.UIAxes2_10, jet);
c.Label.String = 'T11 Tensor';
dt = datatip (s);
s.DataTipTemplate.DataTipRows (end+1) = dataTipTextRow ('T11', flow12,'%.1f');
Try the following:
s.DataTipTemplate.DataTipRows (end+1) = dataTipTextRow ('T11', s.CData,'%.3f');
Same error unfortunately. :(
Could you please try once more.
clear; clc;
[x,y] = meshgrid(1:15,1:15);
z = peaks(15);
T = delaunay(x,y);
C = rand(size(T,1),1); % Color based on number of faces
s = trisurf(T,x,y,z,C);
axis equal;
c = colorbar;
caxis([0.333 1]);
colormap(jet);
c.Label.String = 'T11 Tensor';
dt = datatip(s);
s.DataTipTemplate.DataTipRows(end+1) = dataTipTextRow('Colormap Value',repmat(s.CData,1,3),'%.3f');
Mainly this one:
s.DataTipTemplate.DataTipRows (end+1) = dataTipTextRow ('T11', repmat(s.CData,1,3),'%.3f');
This works perfectly. Thank you so much! One minor issue is that when I run the code, it has already selected a point and showing the data tip before I even interact with the model. Can this be fixed?
Add one more line:
s.DataTipTemplate.DataTipRows(end+1) = dataTipTextRow('Colormap Value',repmat(s.CData,1,3),'%.3f');
delete(dt); % Add this in the last line
or right click on the figure to delete current data tip
Wonderful! Now is it possible to remove X,Y,Z and only keep the colormap value?
Add another line :-)
s.DataTipTemplate.DataTipRows(end+1) = dataTipTextRow('Colormap Value',repmat(s.CData,1,3),'%.3f');
s.DataTipTemplate.DataTipRows(1:3)=[]; % Add this line as well
delete(dt);
Looks great now. Thank you again!

Sign in to comment.

More Answers (1)

I don't think you would be able to see the values like that. But you can see what value it has using:
F = scatteredInterpolant(x,y,z,c) ;
ci = F(xi,yi,zi) ; % where xi, yi, zi is the picked point

5 Comments

Thanks. Can I at least output the (xi,yi,zi) values from the probe? ... as in when the user clicks on a point, and not manually entering the coordinates.
I'm getting an error:
d = datacursormode(app.UIAxes2_10);
Error using datacursormode
Invalid figure handle
Choose figure object
f = figure;
ax = gca;
d = datacursormode(f)
d =
DataCursorManager with properties: SnapToDataVertex: on DisplayStyle: 'datatip' DefaultExportVarName: 'cursor_info' Interpreter: 'tex' UpdateFcn: [] Enable: off Figure: [1×1 Figure]
d2 = datacursormode(ax)
Error using datacursormode (line 154)
Invalid figure handle
Thanks, but how do you get the figure object of an UIAxes in app designer?
trisurf(F,P(:,1),P(:,2),P(:,3), flow12, 'Parent', app.UIAxes2_10);
c = colorbar(app.UIAxes2_10);
caxis(app.UIAxes2_10,[0.333 1]);
colormap(app.UIAxes2_10, jet);
c.Label.String = 'T11 Tensor';
On another note, there seems to be a way to modify the data tip function, but I don't really know how to implement customized functions in app designer:

Sign in to comment.

Categories

Asked:

on 10 Mar 2022

Commented:

on 11 Mar 2022

Community Treasure Hunt

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

Start Hunting!