爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 337|回复: 2

[程序设计] (已解决,看最下面红字)matlab m_map空间图数值和颜色不匹配问题

[复制链接]

新浪微博达人勋

发表于 2024-6-27 00:08:07 | 显示全部楼层 |阅读模式
50金钱
本帖最后由 aridlhy 于 2024-6-27 14:24 编辑

本人用matlab 2021b绘制空间图,但是有时候会出现格点颜色和实际数值严重不符合的情况,有时候就没有问题,想了好多天百思不得其解,不知用matlab画图的朋友们有没有出现过这个问题?希望能得到回复。附上图片和代码,实际上图片应该是多彩的,不应该是只有两种体颜色。希望matlab不要有bug,那就辜负了我对它的一片真情



图片1.png

clc;
clear all;
clf;
name_nc = 'dataset\AI_annual_2010.nc';
lon = ncread(name_nc,'lon');
lat = ncread(name_nc,'lat');
%%
file_path = 'dataset\';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.nc'));%获取该文件夹中所有nc格式的图像
img_num = length(img_path_list);%获取图像总数量
for j = 1:img_num
                 image_name = img_path_list(j).name;% 图像名
                 image = ncread(strcat(file_path,image_name),'ai');
                 dat(:,:,j)= image;
                 imshow(image);            
              
end
dat = mean(dat,3,'omitnan');
data = dat';
lat = lat';
data(data == -32768) = NaN;
[nlon, nlat] = meshgrid(lon, lat);
%% 中国边界信息
borders=shaperead('China_map\bou1_4l.shp');
cx=[borders(:).X]; cy=[borders(:).Y];
%% 这块就用到了m_map函数包
%m_proj('miller','lon',[100 125],'lat',[33 45]);  % 地图投影
m_proj('miller','lon',[70 135],'lat',[15 55]);  % 地图投影
m_contourf(nlon,nlat,data,'linestyle','none');
m_grid('linestyle','none','xtick',([110 120]),'Ytick',([35 40 45]));
hold on
m_plot(cx,cy,'g','linewidth',3);  %绘制地图外边界
colormap(jet(10)) % 使用jet颜色映射
colorbar;
caxis([0 8])这个问题解决了:1)m_contourf那一行改成m_contourf(nlon,nlat,data,[0:1:8],'linestyle','none'); 比原始代码加上[0:1:8]类似强制的等值线间隔,就可以了
2)如果不用m_contourf,用m_pcolor(nlon,nlat,data)也能画出类似的阴影图,实际上是马赛克图,但是这种图不同颜色边缘会有锯齿状,高分辨率的数据效果会更好。3)遇到画图问题可以参考m_map来源的加拿大机构网站,最下面有examples,里面函数应用会对人有启发,记得还有个大牛翻译的m_map中文使用指南,在气象家园matlab版就有。推动技术进步的是这些无私的国内外大牛们,在此深表感谢[星星眼]下面是正确的图 new.png







密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-6-27 09:45:39 | 显示全部楼层
感觉caxis这里是不是限定了0-8导致的  另外可以用histogram看一下data的分布  再确定caxis的范围
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-6-27 14:11:34 | 显示全部楼层
wjy_ecnu 发表于 2024-6-27 09:45
感觉caxis这里是不是限定了0-8导致的  另外可以用histogram看一下data的分布  再确定caxis的范围

好的,感谢回复!不是caxis的问题,但也有点类似,在m_contourf里面加一句指示间隔的代码就好了,例如[0:1:8]
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表