plot.m 3.18 KB
Newer Older
1
function h = plot(o, varargin)
2

Stéphane Adjemian's avatar
Stéphane Adjemian committed
3
% Overloads Matlab/Octave's plot function for dseries objects.
4

5
% Copyright (C) 2013-2017 Dynare Team
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
%
% 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 <http://www.gnu.org/licenses/>.

% Get the number of dseries objects
if isequal(nargin,1)
    ndseries = 1;
25
    nvariables = vobs(o);
26 27 28
else
    if isdseries(varargin{1})
        ndseries = 2;
29 30
        nvariables = vobs(o);
        nobservations = nobs(o);
31 32 33 34 35 36 37 38 39 40 41
        if nargin>2 && any(cellfun(@isdseries,varargin(2:end)))
            error('dseries::plot: You cannot pass more two dseries objects!')
        end
        if ~isequal(nvariables, vobs(varargin{1}))
            error('dseries::plot: The two dseries objects must have the same number of variables!')
        end
        if ~isequal(nobservations, nobs(varargin{1}))
            error('dseries::plot: The two dseries objects must have the same number of observations!')
        end
    else
        ndseries = 1;
42
        nvariables = vobs(o);
43 44 45 46 47 48
    end
end

switch ndseries
  case 1
    if isequal(nvariables,1)
49
        hh = plot(o.data,varargin{:});
50
    else
Stéphane Adjemian's avatar
Stéphane Adjemian committed
51
        if ~isempty(varargin)
52 53 54
            message = sprintf('dseries::plot: dseries object %s has %d>1 variables but you passed additional arguments to the plot function.\n                        These additional arguments won''t ne interpreted. Use the Matlab/Octave set command and the plot\n                        handle instead if you wish to modify the properties of the plotted time series.',inputname(1),nvariables);
            warning(message)
        end
55
        hh = plot(o.data);
56 57 58 59
    end
    axis tight;
    id = get(gca,'XTick');
    if isequal(id(1),0)
60
        dates = strings([o.dates(1)-1,o.dates(id(2:end))]);
61
    else
62 63 64
        ID = id(find(isint(id)));
        set(gca,'XTick',ID);
        dates = strings(o.dates(ID));
65 66 67
    end
    set(gca,'XTickLabel',dates);
  case 2
68
    [o0, o1] = align(o, varargin{1});
69
    if isequal(nvariables,1)
70
        hh = plot(o0.data, o1.data, varargin{2:end});
71 72
    else
        if length(varargin)>1
Stéphane Adjemian's avatar
Stéphane Adjemian committed
73
            message = sprintf('dseries::plot: dseries objects %s and %s have %d>1 variables but you passed additional arguments to the plot function.\n                        These additional arguments won''t ne interpreted. Use the Matlab/Octave set command and the plot\n                        handle instead if you wish to modify the properties of the plotted time series.',inputname(1),inputname(2),nvariables);
74 75
            warning(message)
        end
76
        hh = plot(o0.data, o1.data);
77 78 79 80 81 82
    end
  otherwise
    error('dseries::plot: This is a bug! Please report the bug to the authors of Dynare.')
end

if nargout
Stéphane Adjemian's avatar
Stéphane Adjemian committed
83
    h = hh;
84
end