Enter data on a worldmap

1 次查看(过去 30 天)
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 个评论
Kanishk
Kanishk 2024-11-25
Hi @은진, With code and data provided I was able to produce this image.
Could you clarify what is the issue or any missing feature you expect from the plot?
은진
은진 2024-11-28
The precipitation data seems to have mismatched latitude and longitude coordinates.

请先登录,再进行评论。

采纳的回答

O.K.D. Adeesha
O.K.D. Adeesha 2025-1-13
编辑:Walter Roberson 2025-1-13
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
  1. Longitude Adjustment:If your data uses 0–360 longitude, convert it to -180–180 for proper alignment on the map.
  2. Dynamic Color Limits:Adjust clim dynamically using max(precip_data(:)) instead of hardcoding 16.
  3. Data Orientation:Ensure precip_data aligns with X and Y by transposing it.
  4. Visualization Enhancements:Added dynamic ticks for the colorbar and ensured proper handling of color limits.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Weather and Atmospheric Science 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by