1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
function scaleout = fn_mimfgraph(imfe,nvar,q_m,imstp,xlab,ylab,tlab,xTick)
% mimfgraph: multiple impulse functions plotted in subplots put in one chart.
%
% imfe: imstp-by-n^2+2-by-h series data with dates in the first 2 columns in the order of year and month (or quarter).
% imstp: the number of impulse response steps.
% nvar^2+2: n series plus the first 2 columns indicating dates. For the last nvar^2 columns,
% the order is: nvar responses to the 1st shock, ..., nvar responses to the last shock.
% h: The number of sereies on the 3rd dimension, put in the same subplot as in each of the n series.
% The first 2 columns in the 3rd dimension can be NaN while some other columns
% are also allowed to be NaN if no data are available.
% The last 2 columns in the 3rd dimension must be used for error bands if "area"
% is used to plot these bands.
% nvar: number of variables
% q_m: monthly (12) or quarterly (4)
% imstp: number of steps of impulse responses
% xlab,ylab,tlab: x-axis, y-axis, and title labels
% xTick: optional. Eg: [12 24 36].
%---------------
% scaleout: column 1 represents maximums; column 2 minimums. Rows: nvar variables.
%
% See ftd_mseriesgraph.m and fn_mseriesgraph.m
%
% Copyright (C) 1997-2012 Tao Zha
%
% This 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.
%
% It 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.
%
% If you did not received a copy of the GNU General Public License
% with this software, see <http://www.gnu.org/licenses/>.
%
if nargin < 7, xTick = []; end
if nvar^2~=size(imfe,2)-2
disp(' ')
warning('The number of columns in imfe must be nvar^2+2 (columns of dates)')
disp('Press ctrl-c to abort')
pause
end
t = 1:imstp;
temp1=zeros(nvar,1);
temp2=zeros(nvar,1);
minval=zeros(nvar,1); % for each variable to nvar shocks
maxval=zeros(nvar,1); % for each variable to nvar shocks
for i = 1:nvar % variable
for j = 1:nvar % shock
tmpimf = squeeze(imfe(:,2+(j-1)*nvar+i,:));
temp1(j) = min(min(tmpimf));
temp2(j) = max(max(tmpimf));
end
minval(i)=min(temp1);
maxval(i)=max(temp2);
end
scaleout = [minval(:) maxval(:)];
%--------------
% Column j: Shocks 1 to N; Row i: Variable responses to
%-------------
rowlabel = 1;
for i = 1:nvar % variable
columnlabel = 1;
if minval(i)<0
if maxval(i)<=0
yt=[minval(i) 0];
else
yt=[minval(i) 0 maxval(i)];
end
else % (minval(i) >=0)
if maxval(i) > 0
yt=[0 maxval(i)];
else % (identically zero responses)
yt=[-1 0 1];
end
end
scale=[1 imstp minval(i) maxval(i)];
for j = 1:nvar % shock
k1=(i-1)*nvar+j;
k2=(j-1)*nvar+i;
subplot(nvar,nvar,k1)
if 0 % Plot area for error bands at the last two 3-rd dimensions.
area(imfe(:,1)+imfe(:,2)/q_m,squeeze(imfe(:,2+k2,end)),-100,'EdgeColor','none','FaceColor','y') % yellow
hold on
area(imfe(:,1)+imfe(:,2)/q_m,squeeze(imfe(:,2+k2,end-1)),-100,'EdgeColor','none','FaceColor',[1 1 1]) % white
set(gca,'ColorOrder',[0 0 0]); % turn the color off and set it to black
set(gca,'LineStyleOrder', '-|-.|--|:'); % cycle through the newly defined LineSytleOrder
plot(t,squeeze(imfe(:,2+k2,1:end-2)),t,zeros(length(imfe(:,k2)),1),'-');
set(gca,'Layer','top')
hold off
else % No error bands plotted
%=== set color to black and cycle through the newly defined LineSytleOrder
set(0,'DefaultAxesColorOrder',[0 0 0], ...
'DefaultAxesLineStyleOrder','-|-.|--|:')
%set(gca,'ColorOrder',[0 0 0]); % turn the color off and set it to black
%set(gca,'LineStyleOrder', '-|-.|--|:'); % cycle through the newly defined LineSytleOrder
plot(t,squeeze(imfe(:,2+k2,1:end)),t,zeros(length(imfe(:,k2)),1),'-');
end
if 1 % Get legends
if (i==2) & (j==3) % | (i==6)
legend('Const','S1','S2','S3',0)
% legend('Actual Data','Absent policy shocks',0)
end
end
set(gca,'XTick',xTick)
set(gca,'YTick',yt)
grid
axis(scale); % put limits on both axes.
%set(gca,'YLim',[minval(i) maxval(i)]) % put the limit only on the y-axis
if isempty(xTick) %1 % no numbers on axes
set(gca,'XTickLabel',' ');
set(gca,'YTickLabel',' ');
else % put numbers on both axes
if i<nvar
set(gca,'XTickLabelMode','manual','XTickLabel',[])
end
if j>1
set(gca,'YTickLabel',' ');
end
end
if rowlabel == 1
%title(['x' num2str(j)])
%title(eval(['x' num2str(j)]))
title(char(xlab(j)))
end
if columnlabel == 1
%ylabel(['x' num2str(i)])
%ylabel(eval(['x' num2str(i)]))
ylabel(char(ylab(i)))
end
columnlabel = 0;
end
rowlabel = 0;
end
subtitle(tlab)
|