Enter data on a worldmap
5 views (last 30 days)
Show older comments
I want to show precipitation data on the world map
This code does not appear to indicate the exact amount of precipitation in latitude and longitude
Please help me
clc; clear all;
fnm = 'precip.mon.ltm.1981-2010.nc'
lon=double(ncread(fnm,'lon'));
lat=double(ncread(fnm,'lat'));
time=ncread(fnm,'time');
dateT=datetime(1800,01,01,00,00,00)+days(time);
precip=ncread(fnm,'precip');
load coastlines; % Load coastline data
[X, Y] = meshgrid(lon, lat);
for month = 1:12
f = figure;
% Create world map projection
worldmap('world');
setm(gca, 'Origin', [0 180 0]); % Set map origin to be the equator
% Plot precipitation data on the world map
surfm(X', Y', precip(:, :, month)); % Use surfm to plot data on the map
cmap = brewermap(16, 'BrBG'); % Generate the colormap
colormap(cmap); % Apply the colormap to the current figure
cb = colorbar; % Create a colorbar
cb.Label.String = 'mm/day';
clim([0 16]); % Set color axis limits
cb.Ticks = 0:1:16;
% Overlay coastlines
plotm(coastlat, coastlon, 'k', 'LineWidth', 1); % Plot coastlines on top of precipitation data
% Add title with month name
title(sprintf('Average Monthly Precipitation (1981-2010) - %s', datestr(dateT(month), 'mmmm')));
% Save each figure as an image file
filename = sprintf('E:\\Koppen-Geiger climate classes\\Average_Monthly_Precipitation%d.png', month);
saveas(f, filename);
close(f);
end
5 Comments
Accepted Answer
O.K.D. Adeesha
on 13 Jan 2025
Edited: Walter Roberson
on 13 Jan 2025
clc; clear all;
% Load data
fnm = 'precip.mon.ltm.1981-2010.nc';
lon = double(ncread(fnm, 'lon')); % Longitude
lat = double(ncread(fnm, 'lat')); % Latitude
time = ncread(fnm, 'time'); % Time
dateT = datetime(1800, 01, 01, 00, 00, 00) + days(time);
precip = ncread(fnm, 'precip'); % Precipitation data
% Coastline data
load coastlines;
% Create grid for data
[X, Y] = meshgrid(lon, lat);
% Adjust longitude range if needed
if max(lon) > 180
lon = mod(lon + 180, 360) - 180; % Convert to [-180, 180]
[X, Y] = meshgrid(lon, lat); % Recreate grid
end
% Loop through months
for month = 1:12
f = figure;
% World map projection
worldmap([min(lat) max(lat)], [min(lon) max(lon)]);
setm(gca, 'Origin', [0 180 0]); % Set map origin to the equator
% Ensure data is correctly oriented
precip_data = squeeze(precip(:, :, month)); % Extract monthly data
precip_data = precip_data'; % Ensure alignment with X, Y
% Plot precipitation data
surfm(Y, X, precip_data);
% Colormap and colorbar
cmap = brewermap(16, 'BrBG'); % Use brewermap if available
colormap(cmap);
cb = colorbar;
cb.Label.String = 'mm/day';
clim([0 max(precip_data(:))]); % Adjust color limits dynamically
cb.Ticks = 0:2:max(precip_data(:)); % Adjust ticks dynamically
% Overlay coastlines
plotm(coastlat, coastlon, 'k', 'LineWidth', 1);
% Add title with month name
title(sprintf('Average Monthly Precipitation (1981-2010) - %s', datestr(dateT(month), 'mmmm')));
% Save figure
filename = sprintf('E:\\Koppen-Geiger climate classes\\Average_Monthly_Precipitation_%d.png', month);
saveas(f, filename);
close(f);
end
Explanation of Changes
- Longitude Adjustment:If your data uses 0–360 longitude, convert it to -180–180 for proper alignment on the map.
- Dynamic Color Limits:Adjust clim dynamically using max(precip_data(:)) instead of hardcoding 16.
- Data Orientation:Ensure precip_data aligns with X and Y by transposing it.
- Visualization Enhancements:Added dynamic ticks for the colorbar and ensured proper handling of color limits.
More Answers (0)
See Also
Categories
Find more on Weather and Atmospheric Science in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!