How to generate a geographical heat map? (worldwide, country-level granularity)

42 views (last 30 days)
Franck Dernoncourt
Franck Dernoncourt on 14 Jun 2013
Commented: MikCh on 23 Apr 2022
I want to create a geographical heat map like the following in MATLAB:
Each color is based on a list of country with a percentage associated to each of them:
Country with Codes: % of Hits
- United States (US): 36.29%
- India (IN): 18.24%
- United Kingdom (GB): 12.93%
- Spain(ES): 8.22%
- Australia (AU): 3.32%
- Canada (CA): 3.05%
- Germany (DE): 2.49%
- Netherlands (NL): 1.66%
- Israel (IL): 1.39%
- China (CN): 0.83%
How can I do it in MATLAB?
I looked at and Googled around but I didn't find any easy way to do it. Such kind of maps are commonly used (e.g. straightforward to do with the Google Chart API) so I'm hoping someone here shares his/her experience.

Sign in to comment.

Accepted Answer

Antti on 30 Jun 2016
This can be quite easily done with the Mapping toolbox. Here's an example:
% read a shapefile with some regions in it
S = shaperead('usastatelo.shp');
numRegions = length(S);
% show the map
% get the current colormap
cmap = colormap;
numColors = size(cmap,1);
% create some random data [1 numRegions], each data point is associated with a region
data = randi(numColors,1,numRegions);
% set the colors of the regions using the 'FaceColor' -property
for i = 1:length(S)
% FaceColor is now a color from the current colormap, determined by
% it's data value
This gives me the map figure in the attachment.
MikCh on 23 Apr 2022
Nice approach!
What if the data variable include both positive and negative values?
How do we need to modify mapshow(S(i),'FaceColor',cmap(data(i),:)) in the loop so as to accept negative values?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!