Locating points on the figure that correspond to a specific number on the colormap

2 views (last 30 days)
I've opened a .m figure that was generated earlier.
openfig('MapSurface.fig')
Next, I would like to know the xy position of the points on the figure that exactly match with 100 on the colorbar.
This could either be a pixel or list of pixels (as per their xy position) that correspond to 100, or, a marked region on the figure that highlights all points corresponding to 100.MapSurface.png
Note: I'm doing this as my final aim is to calculate the area of the spot size by knowing the location of its boundaries. In other cases the spot size is bigger or an arbitary shape. I've taken the simplest case for this question.
Thank you.
  2 Comments
Jigsaw
Jigsaw on 17 Jul 2019
I used the following code for it
A = [200 200 200 200 200; 200 200 200 200 200; 200 200 100 200 200; 200 200 200 200 200; 200 200 200 200 200];
Percent_matrix = flipud (A);
Percent_Interp = imresize(Percent_matrix,200,'bilinear');
pcolor(Percent_Interp)
shading interp
caxis([0 200])
(The colorbar is a custom one as the predefined ones in matlab didnt have the one i wanted)

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 17 Jul 2019
Edited: Adam Danz on 17 Jul 2019
In this functional example below, the colorbar value (cval) is set to 140.0 which is within the yellow-green spectrum of the colorbar. The tolerance (tol) is set to 0.5 meaning that any value within 140 +/- 0.5 is accepted. A tolerance of 0 only accepts exact matches which will likely fail.
The "CData" (color data) is pulled from the figure and the code identifies which coordinates are within tolerance to your selected color value. Black markers are plotted showing the matches.
figure()
A = [200 200 200 200 200; 200 200 200 200 200; 200 200 100 200 200; 200 200 200 200 200; 200 200 200 200 200];
Percent_matrix = flipud (A);
Percent_Interp = imresize(Percent_matrix,200,'bilinear');
pcolor(Percent_Interp)
shading interp
caxis([0 200])
colorbar();
cval = 140.0; %colorbar value
tol = .5; %tolerance (accepts all values tval+/-tol); use 0 for no tol.
% get color data from the only object on the axis
ax = gca(); %handle to axis that contains the data
cdata = ax.Children.CData; % assumes axis only has 1 object!
% Alternative: cdata = ax.Children.ZData;
% determine which coordinates match selected color value
cidx = cdata >= (cval-tol) & cdata <= cval+tol;
% get the (x,y,z) coordinates of the slected color regions
x = ax.Children.XData; % assumes axis only has 1 object!
y = ax.Children.YData; % assumes axis only has 1 object!
[yidx,xidx] = find(cidx); % *
xSelect = x(xidx);
ySelect = y(yidx);
% mark selected units on figure
hold on
h = plot(xSelect, ySelect, 'ks', 'MarkerFaceColor', 'k','markersize', 2);
% delete(h)
  6 Comments
Jigsaw
Jigsaw on 18 Jul 2019
Oh and I like your suggestion of using contourf().
Its a more neater representation but instead of all the different colour patterns getting contours, if only points corresponding to 100 get a contour then that would do the job.
So basically it would be a representation of all the 100 corresponding points falling within the marked boundary.
Adam Danz
Adam Danz on 18 Jul 2019
Check out the "levels" input to contourf() where you can set the number of contrours.

Sign in to comment.

More Answers (0)

Categories

Find more on Colormaps in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!