- Initialize a matrix of zeros with dimensions equal to the number of latitude tiles and the number of longitude tiles using:
How to create a heat map with tiles?
12 views (last 30 days)
Show older comments
Hello, I am trying to create a heatmap with lat and long. I have a data set with sets of points (lat,lon). I would like a write a code for a heatmap that involves the colours or values as the frequency of points that occur within that tile.
For example, if my heatmap grid looks like the one here:
I would like for the colours or the value of each colour to be determined by how many points fall into that tile.
I've just plotted my lat and lon from my dataset with geodensityplot and geoscatter, but the tiles overlap each other. This plot is given by a code from geoscatter.
Another note is that some points in my dataset are repeated (lat and lon are repeated).
clear all;
T = readtable(['Project1.xlsx']);
Lat = T.lat;
Lon = T.long;
%remove NaN
Lat = Lat(~isnan(Lat))
Lon = Lon(~isnan(Lon))
%make a density heatmap
geodensityplot(Lat,Lon,'Radius',7000);
%counting how many a lat appears
C = [Lat,Lon]
[ii,jj,kk]=unique(C,'rows')
out=[ii histc(kk,1:size(ii,1))]
%geoscatter
figure
geoscatter(Lat,Lon);
A = 10*10;
C=out(:,3)
h = geoscatter(out(:,1),out(:,2),A,C,'filled','Marker','s','MarkerFaceAlpha',.4);
title("Number of Reports per Lat/Lon")
geobasemap colorterrain
%now I want to create a heatmap where the tiles do not overlap
%the tiles used will be 0.18 by 0.25
Lat_tile = 54.82 + 0.18 * [19 17 15 13 11 9 7 5 3 1]'
Lon_tile = -123.25 + 0.25 * [1 3 5 7 9 11]'
X = ones(454,1);
valuesMatrix = [X, Lat, Lon];
heatmap(Lon_tile,Lat_tile,valuesMatrix)
0 Comments
Answers (1)
Ayush
on 12 Oct 2023
Hi Briana,
I understand that you are trying to create a heat map to show the frequency of coordinate points that occurred in a tile.
To do so, you can follow the given steps:
valuesMatrix = zeros(numel(Lat_tile), numel(Lon_tile));
This matrix will store the count of data points falling within each tile.
2. Create a nested for loop, that iterates over each “latitude(i)” and “longitude(j)” tile:
a. Create a logical index “tileIndices” that identifies the data points falling within the current tile in this manner:
tileIndices = Lat >= tileLat & Lat < tileLat + 0.18 & Lon >= tileLon & Lon < tileLon + 0.25;
b. Calculates the sum of “tileIndices” (number of data points falling within the current tile) and assigns it to the corresponding position in “valuesMatrix”.
valuesMatrix(i, j) = sum(tileIndices);
3. Plot the heatmap using:
heatmap(Lon_tile, Lat_tile, valuesMatrix);
Here “Lon_tile” and “Lat_tile” represent the longitude and latitude ranges of the tiles, respectively, and "valuesMatrix” contains the count of data points falling within each tile. The resulting heatmap will show the density of data points in each tile without overlapping as seen in the image.
You can modify your code by referring to this:
% Create a heatmap without overlapping tiles
Lat_tile = 54.82 + 0.18 * (19:-2:1)';
Lon_tile = -123.25 + 0.25 * (1:2:11)';
% Calculate the values matrix for heatmap
valuesMatrix = zeros(numel(Lat_tile), numel(Lon_tile));
for i = 1:numel(Lat_tile)
for j = 1:numel(Lon_tile)
tileLat = Lat_tile(i);
tileLon = Lon_tile(j);
tileIndices = Lat >= tileLat & Lat < tileLat + 0.18 & Lon >= tileLon & Lon < tileLon + 0.25;
valuesMatrix(i, j) = sum(tileIndices);
end
end
% Plot the heatmap
figure
heatmap(Lon_tile, Lat_tile, valuesMatrix);
title('Heatmap of Reports per Tile');
xlabel('Longitude');
ylabel('Latitude');
For more information on the “heatmap” function, please refer to the following link:
Hope this helps!
Regards,
Ayush.
0 Comments
See Also
Categories
Find more on Data Distribution Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!