2021-05-17 21:24:25 +02:00
function graph ( M_, options_, options_occbin_, oo_, var_list)
% function graph(M_, options_, options_occbin_, oo_, var_list)
%
% Inputs:
% - M_ [structure] Matlab's structure describing the model
% - options_ [structure] Matlab's structure containing the options
% - options_occbin_ [structure] Matlab's structure containing Occbin options
% - oo_ [structure] Matlab's structure containing the results
% - var_list [char] list of the variables to plot
2022-04-13 13:15:19 +02:00
% Copyright © 2021 Dynare Team
2021-05-17 21:24:25 +02:00
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
options_ = occbin . set_option ( options_ , options_occbin_ , ' graph.steady_state' ) ;
if ~ exist ( [ M_ . dname ' /graphs' ] , ' dir' )
mkdir ( M_ . dname , ' graphs' ) ;
end
fidTeX = write_latex_header ( M_ , options_ ) ;
if isempty ( var_list )
var_list = M_ . endo_names ( 1 : M_ . orig_endo_nbr ) ;
end
%get endogenous variables
[ i_var , number_of_plots_to_draw_endo , index_uniques ] = varlist_indices ( var_list , M_ . endo_names , 1 ) ;
var_list_plots = var_list ( index_uniques ) ;
var_list_TeX = M_ . endo_names_tex ( i_var ) ;
2021-12-06 16:53:51 +01:00
data_to_plot ( : , : , 1 ) = oo_ . occbin . simul . piecewise ( : , i_var ) ;
if isfield ( oo_ . occbin , ' simul' ) && isfield ( oo_ . occbin . simul , ' linear' )
data_to_plot ( : , : , 2 ) = oo_ . occbin . simul . linear ( : , i_var ) ;
2021-05-17 21:24:25 +02:00
legend_list = { ' Piecewise Linear' , ' Linear' } ;
else
legend_list = { ' Piecewise Linear' } ;
end
nperiods = size ( data_to_plot , 1 ) ;
ndim = size ( data_to_plot , 3 ) ;
if ~ options_ . occbin . graph . steady_state
2021-12-06 16:53:51 +01:00
data_to_plot = data_to_plot - repmat ( oo_ . occbin . simul . ys ( i_var ) ' , nperiods , 1 , ndim ) ;
2021-05-17 21:24:25 +02:00
end
%get exogenous variables
[ i_var_exo , number_of_plots_to_draw_exo , index_uniques ] = varlist_indices ( var_list , M_ . exo_names , 1 ) ;
var_list_plots = [ var_list_plots ; var_list ( index_uniques ) ] ;
var_list_TeX = [ var_list_TeX ; M_ . exo_names_tex ( i_var_exo ) ] ;
if number_of_plots_to_draw_exo > 0
exo_index = NaN ( number_of_plots_to_draw_exo ) ;
for ii = 1 : length ( i_var_exo )
2021-12-06 16:53:51 +01:00
temp_index = find ( oo_ . occbin . simul . exo_pos == i_var_exo ( ii ) ) ;
2021-05-17 21:24:25 +02:00
if ~ isempty ( temp_index )
exo_index ( ii ) = temp_index ;
else
error ( ' %s was not part of the shocks for Occbin.' , var_list { i_var_exo ( ii ) } ) ;
end
end
2021-12-06 16:53:51 +01:00
data_to_plot ( : , end + 1 : end + number_of_plots_to_draw_exo , 1 ) = [ oo_ . occbin . simul . shocks_sequence ( : , exo_index ) ; zeros ( nperiods - size ( oo_ . occbin . simul . shocks_sequence , 1 ) , number_of_plots_to_draw_exo ) ] ;
2021-05-17 21:24:25 +02:00
data_to_plot ( : , end + 1 : end + number_of_plots_to_draw_exo , 2 ) = NaN ;
end
[ nbplt , nr , nc , lr , lc , nstar ] = pltorg ( number_of_plots_to_draw_endo + number_of_plots_to_draw_exo ) ;
for fig = 1 : nbplt
hh = dyn_figure ( options_ . nodisplay , ' Name' , [ ' Occbin simulated paths, figure ' int2str ( fig ) ] ) ;
for plt = 1 : nstar
if fig == nbplt && ~ lr == 0
subplot ( lr , lc , plt ) ;
else
subplot ( nr , nc , plt ) ;
end
h_zero = plot ( [ 1 nperiods ] , [ 0 0 ] , ' --k' , ' linewidth' , 0.5 ) ;
hold on
h1 = plot ( 1 : nperiods , data_to_plot ( : , ( fig - 1 ) * nstar + plt , 1 ) , ' b-' , ' linewidth' , 2 ) ;
if ndim == 2 && ( fig - 1 ) * nstar + plt < = number_of_plots_to_draw_endo
h2 = plot ( 1 : nperiods , data_to_plot ( : , ( fig - 1 ) * nstar + plt , 2 ) , ' r--' , ' linewidth' , 2 ) ; hold on
end
hold off
max_y = max ( max ( data_to_plot ( : , ( fig - 1 ) * nstar + plt , : ) ) ) ;
min_y = min ( min ( data_to_plot ( : , ( fig - 1 ) * nstar + plt , : ) ) ) ;
y_bottom = min_y - . 01 * abs ( min_y ) ;
y_top = max_y + 0.01 * abs ( max_y ) ;
if y_bottom == y_top
y_top = y_bottom + 1 ;
end
axis ( [ 1 nperiods y_bottom y_top ] )
remove_fractional_xticks
if plt == 1
if ndim == 2
legend ( [ h1 , h2 ] , legend_list , ' box' , ' off' )
else
legend ( [ h1 ] , legend_list , ' box' , ' off' )
end
end
if options_ . TeX
title ( [ ' $' var_list_TeX { ( fig - 1 ) * nstar + plt , : } ' $' ] , ' Interpreter' , ' latex' ) ;
else
title ( deblank ( var_list_plots ( ( fig - 1 ) * nstar + plt , : ) ) , ' Interpreter' , ' none' ) ;
end
if number_of_plots_to_draw_endo + number_of_plots_to_draw_exo == ( fig - 1 ) * nstar + plt
break
end
end
dyn_saveas ( hh , [ M_ . dname , ' /graphs/' M_ . fname ' _occbin_' int2str ( fig ) ] , options_ . nodisplay , options_ . graph_format ) ;
if options_ . TeX && any ( strcmp ( ' eps' , cellstr ( options_ . graph_format ) ) )
fprintf ( fidTeX , ' \\begin{figure}[H]\n' ) ;
fprintf ( fidTeX , ' \\centering \n' ) ;
if fig == nbplt
fprintf ( fidTeX , ' \\includegraphics[width=%2.2f\\textwidth]{%s_occbin_%s}\n' , options_ . figures . textwidth * min ( plt / nc , 1 ) , [ M_ . dname , ' /graphs/' M_ . fname ] , int2str ( fig ) ) ;
else
fprintf ( fidTeX , ' \\includegraphics[width=%2.2f\\textwidth]{%s_occbin_%s}\n' , options_ . figures . textwidth * min ( plt / lc , 1 ) , [ M_ . dname , ' /graphs/' M_ . fname ] , int2str ( fig ) ) ;
end
fprintf ( fidTeX , ' \\caption{Simulated time paths over time. Blue solid line: taking occasionally binding constraint into account. Red dashed line: ignoring constraint.}\n' ) ;
fprintf ( fidTeX , ' \\label{Fig:occbin:%s}\n' , int2str ( fig ) ) ;
fprintf ( fidTeX , ' \\end{figure}\n' ) ;
fprintf ( fidTeX , ' \n' ) ;
end
end
if options_ . TeX && any ( strcmp ( ' eps' , cellstr ( options_ . graph_format ) ) )
fprintf ( fidTeX , ' \n' ) ;
fprintf ( fidTeX , ' %% End Of TeX file. \n' ) ;
fclose ( fidTeX ) ;
end
function fidTeX= write_latex_header ( M_,options_)
if options_ . TeX && any ( strcmp ( ' eps' , cellstr ( options_ . graph_format ) ) )
fidTeX = fopen ( [ M_ . dname , ' /graphs/' M_ . fname ' _occbin.tex' ] , ' w' ) ;
fprintf ( fidTeX , ' %% TeX eps-loader file generated by occbin.make_chart.m (Dynare).\n' ) ;
fprintf ( fidTeX , [ ' %% ' datestr ( now , 0 ) ' \n' ] ) ;
fprintf ( fidTeX , ' \n' ) ;
else
fidTeX = [ ] ;
end