How can I create a graduate colour map in Matlab using the Mapping Toolbox?

8 ビュー (過去 30 日間)
Marina
Marina 2017 年 3 月 23 日
コメント済み: Marina 2017 年 5 月 30 日
I'm trying to create a graduate color map in Matlab, plotting emissions (stored in a Matrix) for a couple of countries (Peru, Germany, UK,...):
To create a worldmap I used 'borders'.
screensize = get(0,'screensize');
winsize = screensize./[1 1 1 1] + [+screensize(3)/4 0 -screensize(3)/4 0];
winsize_save = [60 80 winsize(3)-80 winsize(4)-130];
% Creating own colormap, use as colormap(map)
set(fig2,'color',[1 1 1]); % for white background
whitebg([1 1 1]); % for white background
clf;
set(fig2,'color',[1 1 1]); % for white background
set(fig2,'position',winsize);
hold on
borders;
set(gcf,'color','w');
h = borders;
set(h,'color','k');
hold on
out = borders('antarctica','Color','[0.4 , 0.4 , 0.4]');
axesm robinson; mlabel('off'); plabel('off')
Now I want the countries mentioned above to be filled with color depending on the amount of calculated emissions. But I'm stuck with assigning the countries in my map with the calculated emissions. So far I tried to do it manually, by creating my own colorbar, then used 'facecolor' to fill the country with a colour representing the amount of emissions (see code below). But I'm sure there must be a nicer way to do it.
screensize = get(0,'screensize');
winsize = screensize./[1 1 1 1] + [+screensize(3)/4 0 -screensize(3)/4 0];
winsize_save = [60 80 winsize(3)-80 winsize(4)-130];
fig2 = figure(2);
% Creating own colormap, use as colormap(map)
map = zeros(5,3);
map(5,:) = [0.18 0.09 0.44];
map(4,:) = [0.06 0.13 0.97];
map(3,:) = [0.13 0.45 1.00];
map(2,:) = [0.25 0.65 0.99];
map(1,:) = [0.52 0.82 0.96];
colormap(map)
%set(fig2,'MenuBar','none','ToolBar','none');
set(fig2,'color',[1 1 1]); % for white background
whitebg([1 1 1]); % for white background
clf;
set(fig2,'color',[1 1 1]); % for white background
set(fig2,'position',winsize);
hold on
borders;
set(gcf,'color','w');
h = borders;
set(h,'color','k');
hold on
out = borders('antarctica','Color','[0.4 , 0.4 , 0.4]');
out2 = borders('United Kingdom','facecolor','[0.52 0.82 0.96]');
out3 = borders('Peru','facecolor','[0.25 0.65 0.99]');
out4 = borders('Italy','facecolor','[0.25 0.65 0.99]');
out5 = borders('France','facecolor','[0.25 0.65 0.99]');
out6 = borders('Germany','facecolor','[0.25 0.65 0.99]');
axesm robinson; mlabel('off'); plabel('off')
hcb=colorbar;
set(hcb,'YTick',[0, 0.2, 0.4, 0.6, 0.8, 1])
My questions are: 1) How can I assign countries (patch) with my emissions calculated 2) How can I fill the colour lines according to the amount of emissions (dark color - high emissions, light color - low emission)

採用された回答

Chad Greene
Chad Greene 2017 年 5 月 24 日
Hi Marina,
You may have solved the issue by now, but I've just uploaded a function to File Exchange called patchsc. It scales patch face colors to numeric values. I haven't made a version for the Mapping Toolbox, but you may be able to tweak patchsc for use with the Mapping Toolbox.
  1 件のコメント
Marina
Marina 2017 年 5 月 30 日
Hi Chad, thank you so much for the function. That's really great and helpful.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePolygons についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by