Plot Heatmap from distinct coordinates and data array of floats

30 vues (au cours des 30 derniers jours)
Elinor Ginzburg
Elinor Ginzburg le 6 Août 2023
Commenté : Elinor Ginzburg le 13 Août 2023
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

Réponse acceptée

KSSV
KSSV le 6 Août 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 commentaires
KSSV
KSSV le 7 Août 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
Elinor Ginzburg
Elinor Ginzburg le 13 Août 2023
I'm sorry for the late reply. Thank you so much for your help!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Data Distribution Plots dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by