Passing parameters to plot() and axes() functions?

36 Ansichten (letzte 30 Tage)
Knut
Knut am 28 Jun. 2018
Kommentiert: Stephen23 am 1 Jul. 2022
I would like to make a function that adds functionality on top of plot. I.e. a specialized plot. Say,
function my_plot(varargin)
plot(varargin{1}, varargin{2}, 'r');
axis square;
end
When calling this, I might like to pass additional parameters:
my_plot(x, y, 'title', 'Hello');
Now, I could do this by explicitly capturing each passed parameter, but this quickly become tedious. I would rather pass a generic array ala the snip below, where parameter/value pairs are simply relayed directly to the plot function:
PlotOpts.LineStyle = '-.';
PlotOpts.Color = [0 1 0];
plot(rand(10,1),PlotOpts);
However, after some fudging around, I did not find a similar way of using axes ala:
h = axes();
AxesOpts.XLabel = 'Real';
AxesOpts.XLim = [0 1];
set(h, AxesOpts);

Antworten (1)

Stephen23
Stephen23 am 28 Jun. 2018
Bearbeitet: Stephen23 am 28 Jun. 2018
Simple option: use varargin:
function myplot(X,Y,varargin)
plot(X, Y, 'r', varargin{:})
More complex option: convert options struct to cell array:
function myplot(X,Y,S)
C = reshape(fieldnames(S),1,[]);
C(2,:) = struct2cell(S);
plot(X, Y, 'r', C{:})
See:
I wrote explicit argument names for X and Y for this reason:
  4 Kommentare
Noah Tang
Noah Tang am 1 Jul. 2022
The last syntax where an axes object is passed first seems to make this more complicated for me, do I need an input argument list parser?
Stephen23
Stephen23 am 1 Jul. 2022
If your function has one leading optional input it could be handled by a simple IF, something like this:
function h = drawEllipse(varargin)
a = varargin{1};
if isscalar(a) && ishghandle(a) && strcmpi(get(a,'type'),'axes')
input parsing for varargin(2:end)
else
input parsing for varargin(1:end)
a = gca();
end

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by