drawvaldet.m
来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· M 代码 · 共 162 行
M
162 行
function drawValDet(VP,Loc,Umb,Maes,kDay,kStn,Action)
if(nargin<5)
fg=figure('menubar','figure','name',['Deterministic validation of ' Maes.lVar],'Resize','off','Position',[100 100 400 600]);
PP=get(fg,'Position');
set(fg,'Position',[PP(1:2) 400 600])
Data.Prdc=VP.Prdc*Maes.fctr;Data.Obsr=VP.Obsr*Maes.fctr;Data.Loc=Loc;Data.Maes=Maes;
set(fg,'UserData',Data);
drawValDet([],[],[],[],1,1,'This');
return
else
Data=get(gcf,'UserData');
Prdc=abs((Data.Prdc-Data.Obsr));
if (~isstruct(Data.Loc))
Loc=Data.Loc;
NodEv=[];
colorMap=[];
else
Loc=Data.Loc.loc;
if(isfield(Data.Loc,'NodEv'))
NodEv=Data.Loc.NodEv;
else
NodEv=[];
end
if(isfield(Data.Loc,'colorMap'))
colorMap=Data.Loc.colorMap;
else
colorMap=[];
end
end
if isempty(NodEv)
NodEv=0;
end
if isempty(colorMap)
colorMap=hsv(20);
colorMap=colorMap(1:end-5,:);
end
valZ=colorMap;
Maes=Data.Maes;
if(strcmp(Action,'New'))
PP=get(gcf,'Position');
fg=figure('menubar','figure','name',['Deterministic validation of ' Maes.lVar],'Resize','off');
PP=PP+[10 -10 0 0];
set(fg,'Position',[PP(1:2) 400 600])
set(fg,'UserData',Data)
else
clf
end
end
colormap(valZ);
sZ=size(valZ,1);
pdn=min(min(Prdc));
pdx=max(max(Prdc));
fidbnd=fopen('worldcoasthi.bin','rb','ieee-be');
bnd=fread(fidbnd,[2,inf],'single')';
fclose(fidbnd);
maxx=max(Loc(:,1));minx=min(Loc(:,1));
maxy=max(Loc(:,2));miny=min(Loc(:,2));
Dx=maxx-minx;
Dy=maxy-miny;
if (Dx~=0 & Dy~=0)
maxx=maxx+Dx*0.2;minx=minx-Dx*0.2;
maxy=maxy+Dy*0.2;miny=miny-Dy*0.2;
else
maxx=max(bnd(:,1));minx=min(bnd(:,1));
maxy=max(bnd(:,2));miny=min(bnd(:,2));
end
axes('units','normal','position',[0.125 0.50*2/3+1/3 0.75 0.04*2/3],...
'box','on','xlimmode','manual','ylimmode','manual',...
'XTickMode','manual','Xtick',[],'YTickMode','manual','Ytick',[],...
'XLim',[0 1],'YLim',[0 1]);
hold on
image([0 1],[0 1],1:size(valZ,1))
axes('units','normal','position',[0 0.5625*2/3+1/3 1 0.375*2/3],'DataAspectRatioMode','Manual','DataAspectRatio',[1 1 1],...
'box','on','xlimmode','manual','ylimmode','manual',...
'XTickMode','manual','Xtick',[],'YTickMode','manual','Ytick',[],...
'XLim',[minx maxx],'YLim',[miny maxy]);
title(['Validacion de ' Maes.lVar ' 'Maes.lUnt '. Dia: ' Maes.lDay{kDay} '. RMSE=' num2str(sqrt(nanmean(Prdc(kDay,:).^2,2)))],'FontSize',7);
line(bnd(:,1),bnd(:,2),'Color','k','linestyle','-');
for k=1:size(Loc,1)
cmenu=uicontextmenu;
uimenu(cmenu,'Label',Maes.lStn{k});
fm=uimenu(cmenu,'Label','View Station in','Separator','on');
nwStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(k) ',''New'');'];
thStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(k) ',''This'');'];
uimenu(fm,'Label','New Figure','Callback',nwStr);
uimenu(fm,'Label','This Figure','Callback',thStr);
coZ=round((Prdc(kDay,k)-pdn)/(pdx-pdn)*(sZ-1)+1);
if any(k==NodEv)
mk='s';
else
mk='o';
end
if(~isnan(coZ))
line(Loc(k,1),Loc(k,2),'linestyle','none','marker',mk,'MarkerEdgeColor','k','MarkerSize',5,'UIContextMenu',cmenu...
,'MarkerFaceColor',valZ(coZ,:)...
,'ButtonDownFcn',['if(strcmp(get(gcf,''SelectionType''),''normal'')),' thStr ',elseif(strcmp(get(gcf,''SelectionType''),''extend'')),' nwStr ',end']...
);
else
line(Loc(k,1),Loc(k,2),'linestyle','none','marker','.','MarkerEdgeColor','k','MarkerSize',5,'UIContextMenu',cmenu...
,'MarkerFaceColor','none'...
,'ButtonDownFcn',['if(strcmp(get(gcf,''SelectionType''),''normal'')),' thStr ',elseif(strcmp(get(gcf,''SelectionType''),''extend'')),' nwStr ',end']...
);
end
end
line(Loc(kStn,1),Loc(kStn,2),'linestyle','none','marker','+','MarkerSize',6,'MarkerEdgeColor','k','HitTest','off'...
...
);
nwStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(kStn) ',''New'');'];
thStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(kStn) ',''This'');'];
cmenu=uicontextmenu;
fm=uimenu(cmenu,'Label','View Day in');
uimenu(fm,'Label','New Figure','Callback',nwStr);
uimenu(fm,'Label','This Figure','Callback',thStr);
thStr=['PP=get(gca,''CurrentPoint'');drawValDet([],[],[],[],round(PP(1,1)),' num2str(kStn) ',''This'');'];
nwStr=['PP=get(gca,''CurrentPoint'');drawValDet([],[],[],[],round(PP(1,1)),' num2str(kStn) ',''New'');'];
axes('units','normal','position',[0.125 0.0625*2/3+1/3 0.75 0.375*2/3],...
'box','on','xlimmode','manual','ylimmode','manual',...
'ButtonDownFcn',['if(strcmp(get(gcf,''SelectionType''),''normal'')),' thStr ',elseif(strcmp(get(gcf,''SelectionType''),''extend'')),' nwStr ',end'],'FontSize',7,...
'XLim',[1 size(Prdc,1)],'YLim',[pdn pdx],'UIContextMenu',cmenu);
title(['Validacion de ' Maes.lVar ' 'Maes.lUnt '. Estacion: ' Maes.lStn{kStn} '. RMSE=' num2str(sqrt(nanmean(Prdc(:,kStn).^2,1)))],'FontSize',7);
xlabel('Dia','FontSize',7);ylabel('|e|');
line([kDay kDay],[pdn pdx],'Color','r','linewidth',2,'HitTest','off');
line(1:size(Prdc,1),squeeze(Prdc(:,kStn)),'Color','k','linestyle','-','HitTest','off');
nwStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(kStn) ',''New'');'];
thStr=['drawValDet([],[],[],[],' num2str(kDay) ',' num2str(kStn) ',''This'');'];
cmenu=uicontextmenu;
fm=uimenu(cmenu,'Label','View Day in');
uimenu(fm,'Label','New Figure','Callback',nwStr);
uimenu(fm,'Label','This Figure','Callback',thStr);
thStr=['PP=get(gca,''CurrentPoint'');drawValDet([],[],[],[],round(PP(1,1)),' num2str(kStn) ',''This'');'];
nwStr=['PP=get(gca,''CurrentPoint'');drawValDet([],[],[],[],round(PP(1,1)),' num2str(kStn) ',''New'');'];
pdn=min(min([Data.Prdc(1:end),Data.Obsr(1:end)]));
pdx=max(max([Data.Prdc(1:end),Data.Obsr(1:end)]));
axes('units','normal','position',[0.125 0.0625*2/3 0.75 0.375*2/3],...
'box','on','xlimmode','manual','ylimmode','manual',...
'ButtonDownFcn',['if(strcmp(get(gcf,''SelectionType''),''normal'')),' thStr ',elseif(strcmp(get(gcf,''SelectionType''),''extend'')),' nwStr ',end'],'FontSize',7,...
'XLim',[1 size(Prdc,1)],'YLim',[pdn pdx],'UIContextMenu',cmenu);
title(['Prediccion & Observacion de ' Maes.lVar ' 'Maes.lUnt '. Estacion: ' Maes.lStn{kStn} '. RMSE=' num2str(sqrt(nanmean(Prdc(:,kStn).^2,1)))],'FontSize',7);
xlabel('Dia','FontSize',7);ylabel('');
line([kDay kDay],[pdn pdx],'Color','r','linewidth',2,'HitTest','off');
line(1:size(Data.Obsr,1),squeeze(Data.Obsr(:,kStn)),'Color','r','linestyle','-','HitTest','off');
line(1:size(Data.Prdc,1),squeeze(Data.Prdc(:,kStn)),'Color','b','linestyle','-','HitTest','off');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?