Effacer les filtres
Effacer les filtres

Heat maps with 3 variable

61 vues (au cours des 30 derniers jours)
Huw Wadkin
Huw Wadkin le 14 Juin 2021
Modifié(e) : LO le 14 Juin 2021
hello all, I am fairly new to Matlab. What's the best way to create a scatter plot where for example x axis is year, y axis is month and the colour of each point is dependent on average temperature? Like a heat map. Any help is appreciated, I may be missing something obvious. Thanks in advance, Huw
  1 commentaire
Scott MacKenzie
Scott MacKenzie le 14 Juin 2021
You can review your options at Types of MATLAB Plots. Problably contour or contourf is what you want.

Connectez-vous pour commenter.

Réponse acceptée

LO le 14 Juin 2021
Modifié(e) : LO le 14 Juin 2021
you can use the function "scatter3", if you have 3 variables (this will display a scatter plot of x and y and z on the 3rd axis). If you use the 3rd variable as color variable (not as z but as "c", see documentation of scatter3) you can color code x and y based on your 3rd var. Use view(2) to flatten the plot and avoid the 3D if you want a heatmap like plot.
S = 5; % size of the dots
% this may or not work depending on the values of Z (you may convert them to fit,
% either multiplying them or rescaling them so that they are > 0 and < 1.
% for example z = z/max(z), this vector will now contain normalized values
I alternatively use imagesc (as in this example by Johnathan Epperl), you can adjust the color intensity changing the limits of the color axis (caxis, see documentation). You can visualize a colorbar using the "colorbar" command.
See if it works for your purpose
% Your x-axis
x = linspace(0,2*pi);
% y-axis
y = linspace(0,2*pi);
% a mesh because
[X,Y] = meshgrid(x,y);
% you need data at every possible x-y combination
Z = sin(X).*atan(Y);
% that scales the Z-values and plots a heatmap
% choose a colormap of your liking
colormap hot
another alternative (assuming x,y,z are your vars)
range_x = max(x)-min(x);
range_y = max(y)-min(y);
average = mean(z);
heatmap = average*ones(100, 100);
for k = 1 : length(x)
X = round( (x(k) - min(x)) * 100 / range_x ) + 1;
Y = round( (y(k) - min(y)) * 100 / range_y ) + 1;
heatmap(Y, X) = z(k);

Plus de réponses (0)


En savoir plus sur Colormaps dans Help Center et File Exchange


Community Treasure Hunt

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

Start Hunting!

Translated by