Passing parameters to plot() and axes() functions?
16 次查看(过去 30 天)
显示 更早的评论
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);
0 个评论
回答(1 个)
Stephen23
2018-6-28
编辑:Stephen23
2018-6-28
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 个评论
Noah Tang
2022-7-1
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
2022-7-1
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Line Plots 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!