Plot Heatmap from distinct coordinates and data array of floats

30 views (last 30 days)
Hi,
I have an array of floats of size 200x2 where each row is the (x,y) coordinate of a specific point on the heatmap (x=column 1 and y=column 2). I also have an array of floats of size 1x200, which is the data I want to plot, I'll denote it as z. At each row of the coordinates array, the point (x,y) is associated with the value in z at the same index. I want to create a heatmap using this data.
I tried creating a meashgrid from the two columns of the coordinate array, but then I have this problem that z doesn't have the proper dimantions. I believe I need to create an array filed with zeros, and fill it with z values at the adequate coordinates, but than I have the problem that the coordinates are floats.
This is the code I used (which is of course problematic):
coords = load('grid_points.mat').array;
accuracies = load('test_accuracies.mat').array;
xcoord = coords(:,1);
ycoord = coords(:,2);
[X,Y] = meshgrid(xcoord,ycoord);
x = X(:); % Your varaible x should something like this as a column vector
y = Y(:); % Similar for variable y
z = accuracies(:); % Similar for variable z
tbl = table(x,y,z); % Combine them in a table
h = heatmap(tbl,'x','y','ColorVariable','z'); % Generate heat map
patial view of the coordinates array:
patial view of the data array:
I'd appreciate it if anyone could help me understand how can I overcome the fact that the coordinates array has floats in it (I don't want to convert it into integers, I want to keep it as floats if possible).
Thank you very much for your time and attention

Accepted Answer

KSSV
KSSV on 6 Aug 2023
It depends on your data whether it is structured or unstructured. Let x, y, z be your column data vectors.
%%structured
xi = unique(x) ; yi = unique(y) ;
[X,Y] = meshgrid(xi,yi) ;
Z = reshape(z,size(X)) ;
figure
surf(X,Y,Z)
%%unstructured
dt = delaunayTriangulation(x,y) ;
tri = dt.ConnectivityList ;
figure
trisurf(tri,x,y,z)
Also have a look on griddata and scatteredInterpolant
  5 Comments
KSSV
KSSV on 7 Aug 2023
load test_accuracies.mat
z = array' ;
load grid_points.mat ;
x = double(array(:,1)) ;
y = double(array(:,2)) ;
pgon = polyshape(x,y) ;
xp = pgon.Vertices(:,1) ;
yp = pgon.Vertices(:,2) ;
F = scatteredInterpolant(x,y,z) ;
zp = F(xp,yp) ;
x1 = x(1:100) ; y1 = y(1:100) ;
x2 = x(101:200) ; y2 = y(101:200) ;
xi = linspace(min(x),max(x),500) ;
yi = linspace(min(y),max(y),500) ;
[X,Y] = meshgrid(xi,yi) ;
idx = inpolygon(X,Y,xp,yp) ;
id = ~isnan(zp) ;
Z = griddata(xp(id),yp(id),zp(id),X,Y) ;
Z(~idx) = NaN ;
pcolor(X,Y,Z)
shading interp

Sign in to comment.

More Answers (0)

Categories

Find more on Data Distribution Plots in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!