function ifig = DiagPlot(pagename,page,data,xax,yax,time,pltslc,... outputdir,LoadGridData,SavePlots,DiagDebug); % Function: DiagPlot % Author: Daniel Enderton % % Input Fields: % % Field Type (Brief) Description % ----------------------------------------------------------------------- % ifig integer Figure counter % field cell array Experiment and plot configuration information % data cell array Plotting data % datatime array Iterations ('Int') or months ('Tav') of data % outputdir string Output directory name % LoadGridData 0/1 Optionally load grid data % SavePlots 0/1 Optionally save plot to .eps file % % Descripton: % This is the plotting function for the diagnostics package. This % function should allow you to plot all sorts of things, and is % reasonably versitile. Unfortunately, this also means that things get % quite comlicated. The code is broken up into little scripts to make it % more managable, though unfortunately this makes it rather difficult to % track variables and make changes throughout the function. % Load diagnostics parameters: Plot, general, and field information. DiagGenParam; DiagPlotDefaults; DiagFieldParamA; DiagFieldParamO; DiagFieldParamC; DiagFieldParamI; diagrunparam = ReadVariables('DiagRunDefaults.m'); nrow = length(page); % Initiate figure, with number 'ifig', set oreiention. figure; clf; set(gca,'fontsize',fs_tick); eval(['orient ',Orientation,';']); % 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 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}; % 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 end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Save plot, update figure counter % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Save plot as desired. if SavePlots if isequal(outputdir,'') outputfile = [pagename,'.eps']; else outputfile = [outputdir,'/',pagename,'.eps']; end print('-depsc2',outputfile); end