how to show my output data in map.
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
devendra
le 10 Juin 2014
Commenté : Srishti Gaur
le 3 Mai 2018
sir i want to plot my own output data in map.please help me. how will do this.sir i have 8 years annual time series of rainfall frequency and sir my data size is (20x22x8)(lon,lat,time).
thank you in advance.please sir help me.
Réponse acceptée
Kelly Kearney
le 12 Juin 2014
Modifié(e) : Kelly Kearney
le 12 Juin 2014
I reaally shouldn't be giving you the answer, since you've shown absolutely no effort to create this plot yourself. But I'm bored at work waiting for some simulations to finish, so it's your lucky day.
First of all, I'm assuming that you already have a shapefile holding the India boundary, and that you have a raster grid of x (lon), y (lat), and z coordinates. Also, I'm assuming that your data grid isn't already trimmed to the India borders.
So, the first quick-and-dirty way to do this is to simply mask the data points outside the border:
file = 'TM_WORLD_BORDERS-0.3.shp';
S = shaperead(file, 'usegeocoords', true, 'selector', ...
{@(x) strcmp(x,'India'), 'NAME'});
x = linspace(min(S.Lon), max(S.Lon), 100);
y = linspace(min(S.Lat), max(S.Lat), 100);
[x,y] = meshgrid(x,y);
z = rand(100);
isin = inpolygon(x,y,S.Lon,S.Lat);
z2 = z;
z2(~isin) = NaN;
figure('color','w');
worldmap('India');
pcolorm(y,x,z2);
plotm(S.Lat, S.Lon, 'k');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175088/image.png)
You'll notice that things get a little jagged around the edges, though. You can get a cleaner map by plotting all the data, then overlaying it with a polygon that masks out all but your region of interest. (Or in this case, polygons, since neither geoshow nor patchm tend to play well with polygons with holes):
lnlim = [65 100];
ltlim = [5 40];
lt = linspace(ltlim(1), ltlim(2), 3);
ln = linspace(lnlim(1), lnlim(2), 3);
for ii = 1:2
ltbox{ii} = lt([1 2 2 1 1]'+(ii-1));
lnbox{ii} = ln([1 1 2 2 1]'+(ii-1));
end
[lnmask, ltmask] = deal(cell(2));
for ii = 1:2
for jj = 1:2
[lnmask{ii,jj}, ltmask{ii,jj}] = polybool('-', ...
lnbox{ii}, ltbox{jj}, S.Lon, S.Lat);
end
end
ltboxall = ltlim([1 2 2 1 1]);
lnboxall = lnlim([1 1 2 2 1]);
[lnmaskall, ltmaskall] = polybool('-', lnboxall, ltboxall, S.Lon, S.Lat);
figure('color','w');
worldmap('India');
pcolorm(y,x,z);
for ii = 1:4
patchm(ltmask{ii}, lnmask{ii}, 'w', 'edgecolor', 'none');
end
plotm(ltmaskall, lnmaskall, 'k');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175089/image.png)
9 commentaires
Srishti Gaur
le 3 Mai 2018
Dear Kelly Kearney, How to make multiple sub-plots for the same? I tried but it not able to do. Thank you
Plus de réponses (3)
David Sanchez
le 10 Juin 2014
you could take a look at the demos within Matlab documentation. You will find many working examples on data representation, like this one:
z=peaks(25);
surf(z);
colormap(jet);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175077/image.png)
Adapt your data to any of those examples.
5 commentaires
José-Luis
le 10 Juin 2014
There is no way you can get such a high-resolution map with the data you have.
David Sanchez
le 11 Juin 2014
You will have to present your data by year:
XX YY]= meshgrid(X1,Y1);
z=ltm(:,:,1);
surf(XX,YY,z')
xlabel('XX')
ylabel('YY')
view([0 90])
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175081/image.png)
11 commentaires
peterhack
le 11 Nov 2016
As I have a question on the above example I will utilize this thread, hope that is alright. I am using the presented code to mask the data points outside the border. Works fine so far. However, I want to use the DisplayType surface. Thus I am using geoshow to plot the data. Unfortunately it does not fill the whole map within the borders as a buffer is left. Any hint?
file = 'TM_WORLD_BORDERS-0.3.shp';
S = shaperead(file, 'usegeocoords', true, 'selector', ...
{@(x) strcmp(x,'India'), 'NAME'});
x = linspace(min(S.Lon), max(S.Lon), 100);
y = linspace(min(S.Lat), max(S.Lat), 100);
[x,y] = meshgrid(x,y);
z = rand(100);
isin = inpolygon(x,y,S.Lon,S.Lat);
z2 = z;
z2(~isin) = NaN;
lnlim = [65 100];
ltlim = [5 40];
lt = linspace(ltlim(1), ltlim(2), 3);
ln = linspace(lnlim(1), lnlim(2), 3);
for ii = 1:2
ltbox{ii} = lt([1 2 2 1 1]'+(ii-1));
lnbox{ii} = ln([1 1 2 2 1]'+(ii-1));
end
[lnmask, ltmask] = deal(cell(2));
for ii = 1:2
for jj = 1:2
[lnmask{ii,jj}, ltmask{ii,jj}] = polybool('-', ...
lnbox{ii}, ltbox{jj}, S.Lon, S.Lat);
end
end
ltboxall = ltlim([1 2 2 1 1]);
lnboxall = lnlim([1 1 2 2 1]);
[lnmaskall, ltmaskall] = polybool('-', lnboxall, ltboxall, S.Lon, S.Lat);
figure('color','w');
worldmap('India');
geoshow(y, x, z2, 'DisplayType','surface')
contourcmap('jet',min(z):1:max(z),'colorbar','on','location','horizontal')
for ii = 1:4
patchm(ltmask{ii}, lnmask{ii}, 'w', 'edgecolor', 'none');
end
plotm(ltmaskall, lnmaskall, 'k');
0 commentaires
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!