--- MITgcm_contrib/enderton/Diagnostics/DiagPlot.m 2005/01/31 15:43:27 1.1 +++ MITgcm_contrib/enderton/Diagnostics/DiagPlot.m 2005/09/13 19:32:03 1.7 @@ -40,67 +40,84 @@ % Loop over subplots and make plots. for inrow = 1:nrow - nexp = length(page{inrow}); if nexp ~= 1, nexp = nexp - 1; end - if nexp == 1, cmp = 'Sep'; else, cmp = page{inrow}{end}; end - if nexp == 1, ncol = 1; elseif cmp == 'Sbs', ncol = nexp; else ncol = 1; end + ntrl = length(page{inrow}); if ntrl ~= 1, ntrl = ntrl - 1; end + if ntrl == 1, cmp = 'Sep'; else, cmp = page{inrow}{end}; end + if ntrl == 1, ncol = 1; elseif isequal(cmp,'Sbs'), ncol = ntrl; else ncol = 1; end dx = (1-dxl-dxr-(ncol-1)*dxm)/ncol; dy = (1-dyb-dyt-(nrow-1)*dym)/nrow; for incol = 1:ncol - if size(data{inrow}{incol}) == [6*hres,hres], isCS = 1; else, isCS = 0; end - fln = page{inrow}{incol}{ifln}; - pst = page{inrow}{incol}{ipst}; - flu = page{inrow}{incol}{iflu}; + if ~isequal(data{inrow}{incol},'Empty') - % Set panel settings to default values, override with optional - % settings. - ExpInfo = page{inrow}{incol}; - for iarg = 14:2:length(ExpInfo) - if ~ismember(ExpInfo{iarg},diagrunparam) - ivalue=ExpInfo{iarg+1}; - if isstr(ivalue), fvalue=['''',ivalue,'''']; - elseif prod(size(ivalue))>1, fvalue=mat2str(ivalue); - else fvalue=num2str(ivalue); end - evalexpr = [ExpInfo{iarg},'=',fvalue,';']; - if DiagDebug, disp([' Optional plot parameter evaluation: ',evalexpr]); end - eval(evalexpr); - end - end - - disp([' Row: ',num2str(inrow),'/',num2str(nrow),... - '; Col: ',num2str(incol),'/',num2str(ncol),... - '; Cmp: ',cmp]); - - % Load contour intervals, units (loaded in 'DiagFieldParam[A,O]'). - try, contint; catch - try, eval(['contint = ',fln,'contour',flu,';']); - catch, disp(['***Warning*** No contour information for ',fln]); - disp([' Using 10 generic contour levels.']); - contint = 10; end, end - try, units; catch - try, eval(['units = ',fln,'units',flu,';']); - catch, disp(['***Warning*** No unit information found for ',fln]); - disp([' Using question mark.']); - units = '?'; end, end - - xi = dxl + (incol-1)*(dx+dxm); - yi = 1-dyt-inrow*dy-(inrow-1)*dym; - - isp = (inrow-1)*ncol+incol; - subplot(nrow,ncol,isp); hold on; - set(gca,'position',[xi,yi,dx,dy],'fontsize',fs_axis); - - % (Re)set axes and color axis -- Accounts for things like a possible - % colorbar, or trimming the axis in certain ways. - % Apply desired colorbar, contour label, tick labels, box, grid, and - % other such odds and ends. - DiagPlotMakePlot; - DiagPlotResetAxes; - DiagPlotMisc; - DiagPlotTitles; - clear contint units + % Very crude test to see if cube sphere, must be fixed! + test = size(data{inrow}{incol}); + if test(1)./test(2) == 6, isCS = 1; else, isCS = 0; end + fln = page{inrow}{incol}{ifln}; + pst = page{inrow}{incol}{ipst}; + flu = page{inrow}{incol}{iflu}; + + % Set panel settings to default values, override with optional + % settings. + DiagPlotDefaults; + ExpInfo = page{inrow}{incol}; + for iarg = 14:2:length(ExpInfo) + if ~ismember(ExpInfo{iarg},diagrunparam) + ivalue=ExpInfo{iarg+1}; + if isstr(ivalue), fvalue=['''',ivalue,'''']; + elseif prod(size(ivalue))>1, fvalue=mat2str(ivalue); + else fvalue=num2str(ivalue); end + evalexpr = [ExpInfo{iarg},'=',fvalue,';']; + if DiagDebug, disp([' Optional plot parameter evaluation: ',evalexpr]); end + eval(evalexpr); + end + end + + disp([' Row: ',num2str(inrow),'/',num2str(nrow),... + '; Col: ',num2str(incol),'/',num2str(ncol),... + '; Cmp: ',cmp]); + + % Load contour intervals, units (loaded in + % 'DiagFieldParam[A,O]'). + if ~isequal(cmp,'Dif') + try, contint; catch + try, eval(['contint = ',fln,'contour',flu,';']); + catch, disp(['***Warning*** No contour information for ',fln]); + disp([' Using 10 generic contour levels.']); + contint = 10; end, end + else, try, contint; catch, contint = 10; end, end + try, units; catch + try, eval(['units = ',fln,'units',flu,';']); + catch, disp(['***Warning*** No unit information found for ',fln]); + disp([' Using question mark.']); + units = '?'; end, end + + xi = dxl + (incol-1)*(dx+dxm); + yi = 1-dyt-inrow*dy-(inrow-1)*dym; + + isp = (inrow-1)*ncol+incol; + if DiagDebug, disp([' DiagDebug: Subplot: ',mat2str([nrow,ncol,isp])]); end + if DiagDebug, disp([' DiagDebug: SP Range: ',mat2str([xi,yi,dx,dy])]); end + subplot(nrow,ncol,isp); hold on; + set(gca,'position',[xi,yi,dx,dy],'fontsize',fs_axis); + + if Coast + fac = pi./180; + xax{inrow}{incol} = xax{inrow}{incol}.*fac; + yax{inrow}{incol} = yax{inrow}{incol}.*fac; + else, fac = 1; end + + % (Re)set axes and color axis -- Accounts for things like a possible + % colorbar, or trimming the axis in certain ways. + % Apply desired colorbar, contour label, tick labels, box, grid, and + % other such odds and ends. + DiagPlotMakePlot; + DiagPlotResetAxes; + DiagPlotMisc; + DiagPlotTitles; + clear contint units crange + end end end @@ -111,6 +128,10 @@ % Save plot as desired. if SavePlots - outputfile = [outputdir,'/',pagename,'.eps']; + if isequal(outputdir,'') + outputfile = [pagename,'.eps']; + else + outputfile = [outputdir,'/',pagename,'.eps']; + end print('-depsc2',outputfile); end