Major and minor graticule for maps?
geo, gridlines, matlab, matlab-figure, plot
Solution
Here is a quite simple trick: Make a second `axes` in the same `'Position'` and make your desired major grids there.
Starting from your code with some modifications (I combined `axesm` and `gridm`):
landareas = shaperead('landareas.shp', 'UseGeoCoords', true);
% make the first axes and get the handle of it
ha = axes;
axesm ('lambert',...
'MapLonLimit', [-70 10],...
'MapLatLimit', [30 70],...
'MapParallels', [38.00555556 71.01111111],...
'Grid', 'on',...
'GLineStyle', '-',...
'GLineWidth', 0.1,...
'GColor', [.7 .7 .7], ...
'MLineLocation', 1,...
'PLineLocation', 1);
geoshow(landareas, 'FaceColor', [1 1 .5], 'EdgeColor', [.3 .3 .3]);
axis off;
And then making the second axes:
% get the position of the first axes
L = get(ha, 'Position');
% make a new axes in the same position
axes('Position', L)
axesm ('lambert',...
'MapLonLimit', [-70 10],...
'MapLatLimit', [30 70],...
'MapParallels', [38.00555556 71.01111111],...
'Frame', 'on',...
'FLineWidth', 2,...
'Grid', 'on',...
'GLineStyle', '-',...
'GLineWidth', 2,...
'GColor', [.2 .2 .2], ...
'MLineLocation', 5,...
'MLabelLocation', 5,...
'PLineLocation', 5,...
'PLabelLocation', 5);
mlabel on;
plabel on;
axis off;
You will get this result:
It is not even necessary to get and set the positions, since they both will be created in the default position.
Problem
I have created the following map, which has a uniform gray grid with 1° intervals both for meridians and parallels: I would also like to have the meridians and parallels thicker and in black for every 5° interval (while keeping the 1° grid), so that gridlines match the latitude and longitude labels as shown below: I know that MATLAB has major and minor grids for standard 2D plots, and I have used them in the past. However, as far as I know, maps don't have this feature. I think that what I want to do can be achieved by accessing the map object properties (using `gcm` or `getm`) and specifying a black color property to the specific subset of meridians and parallels (using `setm`). Maybe the functions `gridm` or `axesm` can handle this, but I'm not sure. In practice, I don't know how to do this as I haven't got any experience with maps. I would really appreciate a helping hand. Code: Note: This code requires the Mapping Toolbox. ``` % Read vector features and attributes from shapefile. landareas = shaperead('landareas.shp', 'UseGeoCoords', true); % Define map axes and set map properties. axesm ('lambert',... 'MapLonLimit', [-70 10],... 'MapLatLimit', [30 70],... 'MapParallels', [38.00555556 71.01111111],... 'Frame', 'on',... 'FLineWidth', 1,... 'Grid', 'on',... 'GLineStyle', '-',... 'GLineWidth', 0.1,... 'GColor', [.7 .7 .7]); % Display map latitude and longitude data. geoshow(landareas, 'FaceColor', [1 1 .5], 'EdgeColor', [.3 .3 .3]); % Toggle and control display of graticule lines. gridm('MLineLocation', 1,... 'MLabelLocation', 5,... 'PLineLocation', 1,... 'PLabelLocation', 5); % Toggle and control display of meridian labels. mlabel on; % Toggle and control display of parallel labels. plabel on; axis off; ```