fixed bugs in interactive mode of plot shock decomp that led to crashed with aoa

time-shift
Marco Ratto 2019-06-05 23:17:38 +02:00
parent 2d1402b899
commit 019545e2b3
3 changed files with 28 additions and 8 deletions

View File

@ -67,4 +67,4 @@ options.plot_shock_decomp.colormap = MAP;
options.plot_shock_decomp.endo_names = mydata.endo_names;
options.plot_shock_decomp.endo_names_tex = mydata.endo_names_tex;
plot_shock_decomposition(M,oo,options,var_list_);
plot_shock_decomposition(M,oo,options,{var_list_});

View File

@ -148,6 +148,11 @@ for j=1:nvar
ax=axes('Position',[0.1 0.1 0.6 0.8],'box','on');
% plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2)
% axis(ax,[xmin xmax ymin ymax]);
if strcmp('aoa',DynareOptions.plot_shock_decomp.type)
bgap = 0.15;
else
bgap = 0;
end
hold on;
for i=1:gend
i_1 = i-1;
@ -156,10 +161,10 @@ for j=1:nvar
for k = 1:comp_nbr
zz = z1(k,i);
if zz > 0
fill([x(i) x(i) x(i+1) x(i+1)]+(1/freq/2),[yp yp+zz yp+zz yp],k);
fill([x(i)+bgap x(i)+bgap x(i+1)-bgap x(i+1)-bgap]+(1/freq/2),[yp yp+zz yp+zz yp],k);
yp = yp+zz;
else
fill([x(i) x(i) x(i+1) x(i+1)]+(1/freq/2),[ym ym+zz ym+zz ym],k);
fill([x(i)+bgap x(i)+bgap x(i+1)-bgap x(i+1)-bgap]+(1/freq/2),[ym ym+zz ym+zz ym],k);
ym = ym+zz;
end
hold on;
@ -220,7 +225,7 @@ for j=1:nvar
c = uicontextmenu;
hl.UIContextMenu=c;
browse_menu = uimenu(c,'Label','Browse group');
expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.plot_shock_decomp.use_shock_groups ''',''' deblank(mydata.plot_shock_decomp.orig_varlist{j}) ''',' int2str(i) ')']);
expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.plot_shock_decomp.use_shock_groups ''',''' mydata.plot_shock_decomp.orig_varlist{j} ''',' int2str(i) ')']);
set(expand_menu,'UserData',mydata,'Tag',['group' int2str(i)]);
for jmember = mydata.shock_group.shocks
uimenu('parent',browse_menu,'Label',char(jmember))
@ -252,6 +257,7 @@ for j=1:nvar
dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
end
end
end
%% write LaTeX-Footer

View File

@ -36,6 +36,7 @@ fig_mode='';
fig_mode1='';
% fig_name='';
% screen_shocks=0;
initval = DynareOptions.plot_shock_decomp.initval;
use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups;
if use_shock_groups
shock_groups = DynareModel.shock_groups.(use_shock_groups);
@ -59,6 +60,11 @@ if isfield(opts_decomp,'init_cond_decomp')
else
init_cond_decomp = 0;
end
if isfield(opts_decomp,'min_nrows')
min_nrows = opts_decomp.min_nrows ;
else
min_nrows = 6;
end
screen_shocks = opts_decomp.screen_shocks;
if ~isempty(DynareOptions.plot_shock_decomp.use_shock_groups) || comp_nbr<=18
screen_shocks=0;
@ -138,9 +144,13 @@ end
ncol=3;
nrow=ceil(comp_nbr/ncol);
ntotrow = nrow;
nrow = min(ntotrow, 6);
nrow = min(ntotrow, min_nrows);
nfigs = ceil(ntotrow/nrow);
labels = char(char(shock_names),'Initial values');
if initval
labels = char(char(shock_names),'All shocks');
else
labels = char(char(shock_names),'Initial values');
end
if ~(screen_shocks && comp_nbr>18)
screen_shocks=0;
end
@ -150,7 +160,11 @@ for j=1:nvar
z1 = squeeze(z(i_var(j),:,:));
if screen_shocks,
[~, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
if initval
labels = char(char(shock_names(isort(1:16))),'Others', 'All shocks');
else
labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
end
zres = sum(z1(isort(17:end),:),1);
z1 = [z1(isort(1:16),:); zres; z1(comp_nbr0:end,:)];
comp_nbr=18;
@ -221,7 +235,7 @@ for j=1:nvar
c = uicontextmenu;
hax.UIContextMenu=c;
browse_menu = uimenu(c,'Label','Browse group');
expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.plot_shock_decomp.use_shock_groups ''',''' deblank(mydata.plot_shock_decomp.orig_varlist{j}) ''',' int2str(ic) ')']);
expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.plot_shock_decomp.use_shock_groups ''',''' mydata.plot_shock_decomp.orig_varlist{j} ''',' int2str(ic) ')']);
set(expand_menu,'UserData',mydata,'Tag',['group' int2str(ic)]);
for jmember = mydata.shock_group.shocks
uimenu('parent',browse_menu,'Label',char(jmember))