function obj = plot_abstract(data, axis_labels, title, legend, command, props)
% plot_abstract - A plot that can be directly visualized or included in subplots.
%
% Usage:
% obj = plot_abstract(data, axis_labels, title, legend, command, props)
%
% Description:
% Base class that holds the necessary data to draw a plot. This data
% can then be used to generate different plots. Subclasses define specific
% plots with additional data. Subclasses should conform to the standard
% that the series of commands found in plotFigure should produce a valid
% figure.
%
% Parameters:
% data: A cell array of data arrays (x, y, z, etc.) that can be
% fed to plot commands.
% axis_labels: Cell array of axis label strings.
% title: Plot description string.
% legend: Cell array of descriptions for each item plotted.
% command: Plotting command to use (Optional, default='plot')
% props: A structure with any optional properties.
% axisLimits: Sets axis limits of non-NaN values in vector.
% tightLimits: If 1, issues an "axis tight" command (default=0)
% border: Relative size of border spacing around axis, between 0 - 1. (default=0)
% If a scalar, equal border on all sides, give a four-element vector
% [left bottom right top] to define borders for each side.
% colormap: Figure colormap passed to the colormap function. If
% function handle, its output is passed instead.
% grid: Display dashed grid in background.
% noXLabel: No X-axis label.
% noYLabel: No Y-axis label.
% noTitle: No title.
% rotateXLabel: Rotates the X-axis label for smaller width.
% rotateYLabel: Rotates the Y-axis label for smaller width.
% numXTicks: Number of ticks on X-axis.
% formatXTickLabels: The sprintf format string for tick labels.
% XTick, YTick: Point locations for axis ticks.
% XTickLabel, YTickLabel: Axis tick labels.
% ColorOrder: Set the ColorOrder of the axis.
% LineStyleOrder: Set the LineStyleOrder of the axis.
% legendLocation: Passed to legend(..., 'location', legendLocation).
% legendOrientation: Passed to legend(..., 'orientation', legendLocation).
% noLegends: If exists, no legends are displayed.
% axisProps: Passed to set properties of the axis drawn.
% plotProps: Passed to set properties of the plot drawn.
% figureProps: Passed to set properties of the figure drawn.
% PaperPosition: Sets the figure property for printing at this size.
% resizeControl: If 0, drawing after resize is disabled and prints at screen
% size, if 1 (default), redraws figure after each resize event and
% prints at PaperPosition size.
% fixedSize: Vector of width and height in inches passed to
% PaperPosition property. Implies resizeControl=0.
%
% Returns a structure object with the following fields:
% data, axis_labels, title, legend, command, props
%
% General operations on plot_abstract objects:
% plot_abstract - Construct a new plot_abstract object.
% plot - Plots this plot in the current axis. Abstract method,
% needs to be defined for each subclass.
% plotFigure - Plots this plot in a new figure window.
% superposePlots - Create a superposed plot_abstract from multiple
% plot_abstract objects.
% matrixPlots - Create a matrix of plots from an array of plot_abstract objects.
% setProp - Set optional properties of plot_abstract objects.
%
% Additional methods:
% See methods('plot_abstract')
%
% See also: plot_abstract/plot, plot_abstract/plotFigure
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2004/09/22
% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.
if nargin == 0 % Called with no params
obj.data = {};
obj.axis_labels = {};
obj.title = '';
obj.legend = {};
obj.command = 'plot';
obj.props = struct([]);
obj = class(obj, 'plot_abstract');
elseif isa(data, 'plot_abstract') % copy constructor?
obj = data;
else
if ~ exist('props', 'var')
props = struct([]);
end
if ~ exist('axis_labels', 'var')
axis_labels = {};
end
if ~ exist('title', 'var')
title = '';
end
if ~ exist('legend', 'var')
legend = {};
end
if ~ exist('command', 'var')
command = 'plot';
end
obj.data = data;
obj.axis_labels = axis_labels;
obj.title = title;
obj.legend = legend;
obj.command = command;
obj.props = props;
obj = class(obj, 'plot_abstract');
end