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.

 採用された回答

Simon Chan
Simon Chan 2022 年 3 月 11 日

1 投票

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 件のコメント

Pelajar UM
Pelajar UM 2022 年 3 月 11 日
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');
Simon Chan
Simon Chan 2022 年 3 月 11 日
Try the following:
s.DataTipTemplate.DataTipRows (end+1) = dataTipTextRow ('T11', s.CData,'%.3f');
Pelajar UM
Pelajar UM 2022 年 3 月 11 日
Same error unfortunately. :(
Simon Chan
Simon Chan 2022 年 3 月 11 日
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');
Pelajar UM
Pelajar UM 2022 年 3 月 11 日
編集済み: Pelajar UM 2022 年 3 月 11 日
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?
Simon Chan
Simon Chan 2022 年 3 月 11 日
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
Pelajar UM
Pelajar UM 2022 年 3 月 11 日
Wonderful! Now is it possible to remove X,Y,Z and only keep the colormap value?
Simon Chan
Simon Chan 2022 年 3 月 11 日
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);
Pelajar UM
Pelajar UM 2022 年 3 月 11 日
Looks great now. Thank you again!

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2022 年 3 月 10 日

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 件のコメント

Pelajar UM
Pelajar UM 2022 年 3 月 10 日
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.
KSSV
KSSV 2022 年 3 月 10 日
Pelajar UM
Pelajar UM 2022 年 3 月 10 日
I'm getting an error:
d = datacursormode(app.UIAxes2_10);
Error using datacursormode
Invalid figure handle
Simon Chan
Simon Chan 2022 年 3 月 10 日
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
Pelajar UM
Pelajar UM 2022 年 3 月 10 日
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:

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeColor and Styling についてさらに検索

質問済み:

2022 年 3 月 10 日

コメント済み:

2022 年 3 月 11 日

Community Treasure Hunt

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

Start Hunting!

Translated by