diff --git a/matlab/+mom/graph_comparison_irfs.m b/matlab/+mom/graph_comparison_irfs.m index 1ab5ba4e8afa3c18acd80f79d80203ee9f80680a..b3ba13b13fa4cd92b3eef42ad6fd62b0198ce046 100644 --- a/matlab/+mom/graph_comparison_irfs.m +++ b/matlab/+mom/graph_comparison_irfs.m @@ -1,5 +1,5 @@ -function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth) -% graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth) +function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irf_horizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth) +% graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irf_horizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth) % ------------------------------------------------------------------------- % Plots and saves to disk the comparison of the selected data irfs and corresponding model irfs % ------------------------------------------------------------------------- @@ -7,7 +7,7 @@ function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizo % matched_irfs: [matrix] information on matched data irfs % irf_model_varobs: [matrix] model irfs for observable variables % varobs_id: [vector] index for observable variables in endo_names -% irfHorizon: [scalar] maximum horizon of irfs +% irf_horizon: [scalar] maximum horizon of irfs % relative_irf: [boolean] if true, plots normalized irfs % endo_names: [cell] names of endogenous variables % exo_names: [cell] names of exogenous variables @@ -51,67 +51,69 @@ function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizo % along with Dynare. If not, see <https://www.gnu.org/licenses/>. -graphDirectoryName = CheckPath('graphs',dname); -latexDirectoryName = CheckPath('latex',dname); +graph_directory_name = CheckPath('graphs',dname); +latex_directory_name = CheckPath('latex',dname); if TeX && any(strcmp('eps',cellstr(graph_format))) - fidTeX = fopen([latexDirectoryName filesep fname '_irf_matching_plot.tex'],'w'); - fprintf(fidTeX,'%% TeX eps-loader file generated by mom.run.m (Dynare).\n'); - fprintf(fidTeX,['%% ' datestr(now,0) '\n']); - fprintf(fidTeX,' \n'); + fid_TeX = fopen([latex_directory_name filesep fname '_irf_matching_plot.tex'],'w'); + fprintf(fid_TeX,'%% TeX eps-loader file generated by mom.run.m (Dynare).\n'); + fprintf(fid_TeX,['%% ' datestr(now,0) '\n']); + fprintf(fid_TeX,' \n'); end -shockEntries = cellfun(@(x) x(2), matched_irfs(:, 1)); -uniqueShockEntries = unique(shockEntries); -for jexo = uniqueShockEntries' - entriesDataIrfs = find(cellfun(@(x) x(2) == jexo, matched_irfs(:, 1))); - uniqueVariables = unique(cellfun(@(x) x(1), matched_irfs(entriesDataIrfs,1))); - [nbplt,nr,nc,lr,lc,nstar] = pltorg(length(uniqueVariables)); +shock_entries = cellfun(@(x) x(2), matched_irfs(:, 1)); +unique_shock_entries = unique(shock_entries); +colDarkGrey = [0.3, 0.3, 0.3]; % dark grey +for jexo = unique_shock_entries' + entries_data_irfs = find(cellfun(@(x) x(2) == jexo, matched_irfs(:, 1))); + unique_variables = unique(cellfun(@(x) x(1), matched_irfs(entries_data_irfs,1))); + [nbplt,nr,nc,lr,lc,nstar] = pltorg(length(unique_variables)); fig = 0; - for jvar = 1:length(uniqueVariables) + for jvar = 1:length(unique_variables) if jvar==1 || ~( (fig-1)*nstar<jvar && jvar<=fig*nstar ) fig = fig+1; fig_irf = dyn_figure(nodisplay,'Name',['Irf matching shock to ' exo_names{jexo} ' figure ' int2str(fig)]); end plt = jvar-(fig-1)*nstar; - dataIrfRows = find(cellfun(@(x) x(1) == uniqueVariables(jvar) && x(2) == jexo, matched_irfs(:, 1))); - dataIrfPeriods = cellfun(@(x) x(3), matched_irfs(dataIrfRows,1)); - dataIrfValues = cell2mat(matched_irfs(dataIrfRows,2)); + data_irf_rows = find(cellfun(@(x) x(1) == unique_variables(jvar) && x(2) == jexo, matched_irfs(:, 1))); + data_irf_periods = cellfun(@(x) x(3), matched_irfs(data_irf_rows,1)); + data_irf_values = cell2mat(matched_irfs(data_irf_rows,2)); if nbplt>1 && fig==nbplt subplot(lr,lc,plt); else subplot(nr,nc,plt); end - plt_data = plot(dataIrfPeriods,dataIrfValues,'x','linewidth',2); + plt_data = plot(data_irf_periods,data_irf_values,'h', 'MarkerEdgeColor',colDarkGrey,'MarkerFaceColor',colDarkGrey,'MarkerSize',8); hold on - plt_model = plot(1:irfHorizon, irf_model_varobs(:,varobs_id==uniqueVariables(jvar),jexo),'-k','linewidth',1); + plt_model = plot(1:irf_horizon, irf_model_varobs(:,varobs_id==unique_variables(jvar),jexo),'-k','linewidth',2); hold on - plot([1 irfHorizon],[0 0],'-r','linewidth',0.5); + plot([1 irf_horizon],[0 0],'-r','linewidth',1); hold off - xlim([1 irfHorizon]); + xlim([1 irf_horizon]); remove_fractional_xticks if TeX - title(['$' endo_names{uniqueVariables(jvar)} '$'],'Interpreter','latex'); + title(['$' endo_names{unique_variables(jvar)} '$'],'Interpreter','latex'); else - title(endo_names{uniqueVariables(jvar)},'Interpreter','none'); + title(endo_names{unique_variables(jvar)},'Interpreter','none'); end - if (plt==nstar) || jvar==length(uniqueVariables) + set(gca,'FontSize',12); + if (plt==nstar) || jvar==length(unique_variables) % Adding a legend at the bottom axes('Position',[0, 0, 1, 1],'Visible','off'); - lgd = legend([plt_data,plt_model],{'Data', 'Model'}, 'Location', 'southeast','NumColumns',2); - lgd.Position = [0.405 0.025 lgd.Position(3) lgd.Position(4)]; + lgd = legend([plt_data,plt_model],{'Data', 'Model'}, 'Location', 'southeast','NumColumns',2,'FontSize',14); + lgd.Position = [0.37 0.01 lgd.Position(3) lgd.Position(4)]; - dyn_saveas(fig_irf,[graphDirectoryName filesep fname '_matched_irf_' exo_names{jexo} int2str(fig)],nodisplay,graph_format); + dyn_saveas(fig_irf,[graph_directory_name filesep fname '_matched_irf_' exo_names{jexo} int2str(fig)],nodisplay,graph_format); if TeX && any(strcmp('eps',cellstr(graph_format))) - fprintf(fidTeX,'\\begin{figure}[H]\n'); - fprintf(fidTeX,'\\centering \n'); - fprintf(fidTeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_matched_irf_%s%s}\n',figures_textwidth*min(plt/nc,1),[graphDirectoryName filesep fname],exo_names{jexo},int2str(fig)); + fprintf(fid_TeX,'\\begin{figure}[H]\n'); + fprintf(fid_TeX,'\\centering \n'); + fprintf(fid_TeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_matched_irf_%s%s}\n',figures_textwidth*min(plt/nc,1),[graph_directory_name filesep fname],exo_names{jexo},int2str(fig)); if relative_irf - fprintf(fidTeX,'\\caption{Relative impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo}); + fprintf(fid_TeX,'\\caption{Relative impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo}); else - fprintf(fidTeX,'\\caption{Impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo}); + fprintf(fid_TeX,'\\caption{Impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo}); end - fprintf(fidTeX,'\\label{Fig:IRF:%s:%s}\n', exo_names{jexo},int2str(fig)); - fprintf(fidTeX,'\\end{figure}\n'); - fprintf(fidTeX,' \n'); + fprintf(fid_TeX,'\\label{Fig:MatchedIRF:%s:%s}\n', exo_names{jexo},int2str(fig)); + fprintf(fid_TeX,'\\end{figure}\n'); + fprintf(fid_TeX,' \n'); end end end