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 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
function scaleout = fn_multigraphn_ver2(imfn,...
xlab,ylab,tstring,XTick,YTickIndx,scaleIndx,nrowg,ncolg)
%Stacking n sets of impulse responses in one graph. See fn_multigraph2_ver2.m.
% imfn: row: "nstp" time horizon (in the graphics),
% column: "nrow "variables such as responses (row in the graphics),
% 3rd D: across "ncol" different situations such as shocks (column in the graphics),
% 4th D: across different scenarios such as error bands or different models (in each graph).
% xlab: x-axis labels on the top
% ylab: y-axis labels on the left
% tstring: string for time (e.g., month or quarter) -- x-axis labels at the bottom
% YTickIndx: 1: enable YTick; 0: disable;
% To get a better picture, it is sometimes better to set YtickIndx to zero.
% scaleIndx: 1: enable scale along Y-axis; 0: disable
% nrowg: number of rows in the graph
% ncolg: number of columns in the graph
%
% See imrgraph, imcerrgraph, imrerrgraph
%
% 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/>.
%
nstp = size(imfn,1);
nrow = size(imfn,2);
ncol = size(imfn,3);
nmodels = size(imfn,4);
t = 1:nstp;
if (nargin < 9)
nrowg = nrow;
ncolg = ncol;
end
if (nrowg*ncolg < nrow*ncol)
nrowg
ncolg
nrow
ncol
error('fn_multigraphn_ver2.m: nrowg*ncolg must be greater than nrow*ncol')
end
tempmax=zeros(ncol,1);
tempmin=zeros(ncol,1);
maxval=zeros(nrow,1);
minval=zeros(nrow,1);
for i = 1:nrow
for j = 1:ncol
tempmax(j) = -realmax;
tempmin(j) = realmax;
for k=1:nmodels
jnk = max(imfn(:,i,j,k));
tempmax(j) = max([jnk tempmax(j)]);
%
jnk = min(imfn(:,i,j,k));
tempmin(j) = min([jnk tempmin(j)]);
end
end
maxval(i)=max(tempmax);
minval(i)=min(tempmin);
end
scaleout = [maxval(:) minval(:)];
%--------------
% Column j: Shock 1 to N; Row i: Responses to
%-------------
%figure
rowlabel = 1;
for i = 1:nrow % column: from top to bottom
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 nstp minval(i) maxval(i)];
for j = 1:ncol % row: from left to right
k1=(i-1)*ncol+j;
subplot(nrowg,ncolg,k1)
%set(0,'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1],...
% 'DefaultAxesLineStyleOrder','-|--|:')
%set(0,'DefaultAxesLineStyleOrder','-|--|:|-.')
set(0,'DefaultAxesColorOrder',[0 0 0],...
'DefaultAxesLineStyleOrder','-|--|--|:*|-.|-*|--o|:d')
nseries = zeros(nstp, nmodels);
for k=1:nmodels
nseries(:,k) = imfn(:,i,j,k);
end
plot(t,nseries, 'LineWidth',1.7); %,'Color','k');
%set(gca,'LineStyleOrder','-|--|:|-.')
%set(gca,'LineStyleOrder',{'-*',':','o'})
grid;
if scaleIndx
axis(scale);
end
%set(gca,'YLim',[minval(i) maxval(i)])
%
set(gca,'XTick',XTick)
if YTickIndx
set(gca,'YTick',yt)
end
if i<nrow
set(gca,'XTickLabelMode','manual','XTickLabel',[])
end
%set(gca,'XTickLabel',' ');
if (scaleIndx) && (j>1)
set(gca,'YTickLabel',' ');
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
if i==nrow
xlabel(tstring)
end
columnlabel = 0;
end
rowlabel = 0;
end
%Order of line styles and markers used in a plot.
%This property specifies which line styles and markers to use and in what order
%when creating multiple-line plots. For example,set(gca,'LineStyleOrder', '-*|:|o')sets LineStyleOrder to solid line with asterisk
%marker, dotted line, and hollow circle marker. The default is (-), which specifies
%a solid line for all data plotted. Alternatively, you can create a cell array
%of character strings to define the line styles:set(gca,'LineStyleOrder',{'-*',':','o'})MATLAB supports four line styles, which you can specify any number of
%times in any order. MATLAB cycles through the line styles only after using
%all colors defined by the ColorOrder property. For example,
%the first eight lines plotted use the different colors defined by ColorOrder with
%the first line style. MATLAB then cycles through the colors again, using the
%second line style specified, and so on.You can also specify line style and color directly with the plot and plot3 functions
%or by altering the properties of theline or
%lineseries objects after creating the graph. High-Level Functions and LineStyleOrderNote that, if the axes NextPlot property is set
%to replace (the default), high-level functions like plot reset
%the LineStyleOrder property before determining the line
%style to use. If you want MATLAB to use a LineStyleOrder that
%is different from the default, set NextPlot to replacechildren. Specifying a Default LineStyleOrderYou can also specify your own default LineStyleOrder.
%For example, this statementset(0,'DefaultAxesLineStyleOrder',{'-*',':','o'})
%creates a default value for
|