Enter data on a worldmap
    5 ビュー (過去 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 件のコメント
採用された回答
  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
- 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.
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Weather and Atmospheric Science についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





