📄 plot.m
字号:
function theResult = plot(varargin)
% ncvar/plot -- Plot NetCDF variable.
% plot(z, 'thePen') plots NetCDF variable z,
% an "ncvar" object, using 'thePen'. If z is z(x),
% for coordinate variable x, then the function is
% called recursively as Plot(x, z, 'thePen').
% For z(x, y), the recursive call is Plot(x, y,
% z, 'thePen'). The x, y, and z axes are labeled
% with the names and units of the corresponding
% variables. The title is set to the name of
% the z variable.
% Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.
% All Rights Reserved.
% Disclosure without explicit written consent from the
% copyright owner does not constitute publication.
% Version of 28-Apr-1997 09:44:36.
if nargin < 1, help(mfilename), return, end
if nargout > 0, theResult = []; end
result = [];
% Isolate the pen.
thePen = '-';
if isstr(varargin{length(varargin)})
thePen = varargin{length(varargin)};
varargin(length(varargin)) = [];
end
x = []; y = []; z = [];
theXLabel = 'Index Number';
theYLabel = 'Index Number';
theZLabel = 'Value';
if length(varargin) == 1
z = varargin{1};
theNetCDF = parent(z);
theSize = ncsize(z);
theDims = dim(z);
if length(theDims) < 1, return, end
if length(theSize) > 0
x = ncvar(name(theDims{1}), theNetCDF);
if isempty(x)
x = (1:theSize(1)).';
theXLabel = [name(theDims{1}) ' (Index Number)'];
end
end
if length(theSize) > 1
y = ncvar(name(theDims{2}), theNetCDF);
if isempty(y)
y = (1:theSize(2)).';
theYLabel = [name(theDims{2}) ' (Index Number)'];
end
end
if ~isempty(y) & 0
result = plot3(x, y, z, thePen);
xlabel(labelsafe(theXLabel))
ylabel(labelsafe(theYLabel))
else
result = plot(x, z, thePen);
end
elseif length(varargin) > 1
x = varargin{1};
z = varargin{2};
if length(varargin) > 2
y = varargin{2};
z = varargin{3};
end
if isa(x, 'ncvar')
theXLabel = name(x);
a = ncatt('units', x);
theXUnits = labelsafe(a(:));
if ~isempty(theXUnits), theXLabel = [theXLabel ' (' theXUnits ')']; end
switch lower(name(x))
case 'time' % Epic-awareness: epic_code = 624.
t = x;
% x = x(:);
x = ncsubsref(x, '()', {':'});
t2 = ncvar('time2', parent(t));
if ~isempty(t2)
e = ncatt('epic_code', t);
e2 = ncatt('epic_code', t2);
if isequal(e(:), 624) & isequal(e2(:), 624)
tt = ncsubsref(t, '()', ':');
tt2 = ncsubsref(t2, '()', ':');
x = tt + tt2 ./ (24 .* 3600 .* 1000);
theXOffset = floor(min(min(x)));
x = x - theXOffset;
theXLabel = [theXLabel ' - ' int2str(theXOffset)];
end
end
otherwise
% x = x(:);
x = ncsubsref(x, '()', {':'});
end
elseif isa(z, 'ncvar')
theDims = dim(z);
if length(theDims) > 0
theXLabel = [name(theDims{1}) ' (Index Number)'];
end
end
if isa(y, 'ncvar')
theYLabel = name(y);
a = ncatt('units', y);
theYUnits = labelsafe(a(:));
if ~isempty(theYUnits), theYLabel = [theYLabel ' (' theYUnits ')']; end
% y = y(:);
y = ncsubsref(y, '()', {':'});
elseif isa(z, 'ncvar')
theDims = dim(z);
if length(theDims) > 1
theYLabel = [name(theDims{2}) ' (Index Number)'];
end
end
theZLabel = name(z);
a = ncatt('units', z);
theZUnits = labelsafe(a(:));
if ~isempty(theZUnits), theZLabel = [theZLabel ' (' theZUnits ')']; end
axes(gca)
if length(varargin) < 3 | 1
zz = ncsubsref(z, '()', {':'});
result = stackplot(x, zz, thePen);
xlabel(labelsafe(theXLabel))
ylabel(labelsafe(theZLabel))
set(result, 'ButtonDownFcn', 'findpt')
else
zz = ncsubsref(z, '()', {':'});
result = plot3(x, y, zz, thePen);
xlabel(labelsafe(theXLabel))
ylabel(labelsafe(theYLabel))
zlabel(labelsafe(theZLabel))
end
theTitle = name(z);
title(labelsafe(theTitle))
end
if nargout > 0, theResult = result; end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -