Is there way to make heatmap with 3variabls?

1 view (last 30 days)
ryunosuke tazawa on 13 Nov 2021
Commented: ryunosuke tazawa on 19 Nov 2021
I have 3 dates and want to make the heatmap with 3datas.
z is normalized so that the maximum is 1 and the minimum is 1.
Does anyone know how to draw a heatmap with 3 variables?
x = Data(:, 1);
y = Data(:, 2);
z = Q;
zmin = min(z);
zmax = max(z);
for i=1:length(z)
Z(i) = round((z(i) - zmin)/(zmax -zmin),5);
end
imagesc(x,y,Z)
colormap hot
colorbar

Dave B on 13 Nov 2021
Edited: Dave B on 13 Nov 2021
To make an image like this, you need a matrix z which provides a point for each x and y.
That's pretty easy to generate with interpolation, but there are a few challenges with your data:
• x and y are a different size from z. It's unclear how to match up 10000 points with 10002 points.
• the data are very differently distrubuted. You have some dense regions and then some very sparse regions. When data aren't very grid-like, it can be difficult to make a grid-like visualization (like a heatmap)
• the loop is unnecessary
x = Data(:, 1);
y = Data(:, 2);
z = Q;
z = round(z-min(z)/(max(z)-min(z)),5);
Part 2: trim off 2 values from x and y...totally unclear which ones should go and it'll make a big difference. I'm arbitrarily taking the last two values...
x = x(1:10000);
y = y(1:10000);
Part 3: Make a grid of 200 linearly space values spanning x and y:
xx = linspace(min(x),max(x),200);
yy = linspace(min(y),max(y),200);
[xi,yi] = meshgrid(xx,yy);
Part 4: Interpolate
f = scatteredInterpolant(x,y,z)
Warning: Duplicate data points have been detected and removed - corresponding values have been averaged.
f =
scatteredInterpolant with properties: Points: [8905×2 double] Values: [8905×1 double] Method: 'linear' ExtrapolationMethod: 'linear'
zi=f(xi,yi);
Part 5: Image:
imagesc(xx,yy,zi)
colormap hot
% some optional display tweaks:
colorbar
caxis([-50 50])
axis xy Note that interpolation got really strange in the top right. You have a triangle of empty data which poses a problem for interpolation. Let's see what the raw data look like to understand what happened:
figure
scatter(x,y,[],z,'filled')
colormap hot We can inspect these points and see that there's a line there...you don't have any data to the right of that line. How about if we ignored points to the right of that line?
figure
mask = yi>(314 + 100*xi); % I made up an equation for the line based on inspecting the scatter
colormap gray
axis xy There are a few options for how to use the mask. I'm going to just use it as transparency data (using the AlphaData property on Image), so that the ignored data are transparent, and then set the color limits to the min and max of the included data:
figure
axis xy
colormap hot Note that we could use a similar strategy to ignore the missing data at the top...you'd just have to define what that region is.
ryunosuke tazawa on 19 Nov 2021
Thaks a lot.
Due to your help , I could do what I hope.