2D plot of a matrix using colors

3 ビュー (過去 30 日間)
Chihiro Omori
Chihiro Omori 2019 年 3 月 6 日
コメント済み: Chihiro Omori 2019 年 3 月 6 日
I would like to plot air pollutants emissiosn on the US map.
The datasets I am using are
  • lat.mat (172*172)....latitude data
  • lon.mat(172*172)...longitude data
  • CH4.mat (172*172)...air pollutant emission data[mol/sec]
load 'latmat.mat';
load 'lonmat.mat';
load 'CH4.mat';
figure; ax=usamap(('NY','FL'));
setm(ax,'FFaceColor', [.5 .7 .9]);
title('Air pollution map');
%Read shapefile of US with names and locations
states=geoshape(shaperead('usastatehi.shp','UseGeoCoords',true));
%Display map
geoshow(states,'Parent',ax);
%Find states within the shown axes limits
latlim=getm(ax, 'MapLatLimit');
lonlim=getm(ax, 'MapLonLimit');
idx=ingeoquad(states.LabelLat, states.LabelLon,latlim,lonlim);
%Plot coordinates
txt=states(idx).Name;
linem(latmat,lonmat,'LineStyle','none','LineWidth',2,'Color','r','Marker','o', 'MakerSize',10);
This coding results in the figure below(Left). This is obviously 2-D data map.
However I would like to consider the values of air pollutant(z-factor).
The ideal image is like this.
Is there any way to model the dataset?

採用された回答

Cris LaPierre
Cris LaPierre 2019 年 3 月 6 日
There is a challenge here. If you just plot all of CH4emission1 you will just get a block that covers up the map. If you want to see dots, you will need to pick a threshold and only show air polution greater than it. Conversely, you could recolor the map. You have a couple options.
To add something that will work with your script, here is a way to use scatterm to create markers. I've thresholded the pollution data so that only values >5 are shown. The problem here is that, being a scatter plot, the markers are given a size (5), so the points may be artifically big.
idx = find(CH4emission1>5);
scatterm(latmat(idx),lonmat(idx),5,CH4emission1(idx))
colorbar
If you are willing to change things a bit, my approach would be to show all the air pollution data and overlay an outline of the states to that. It just depends what you need. Here's a possible solution
figure
latlim = [min(latmat(:)) max(latmat(:))]
lonlim = [min(lonmat(:)) max(lonmat(:))]
ax = usamap(latlim, lonlim);
title('Air pollution map');
surfm(latmat, lonmat, CH4emission1)
states = shaperead('usastatehi',...
'UseGeoCoords',true,'BoundingBox',[lonlim',latlim']);
geoshow(ax,states,'FaceColor','none')
contourcbar
Here is the resulting image
Chihiro_Omori_map.png
  1 件のコメント
Chihiro Omori
Chihiro Omori 2019 年 3 月 6 日
Thank you so much!

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

その他の回答 (0 件)

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by