为 MATLAB 绘图函数实现多种语法

Posted

技术标签:

【中文标题】为 MATLAB 绘图函数实现多种语法【英文标题】:Implementing multiple syntaxes for a MATLAB plot function 【发布时间】:2013-02-06 14:59:35 【问题描述】:

MATLAB 和工具箱中的许多绘图函数(并非全部)都允许以下两种语法:

plotfcn(data1, data2, ...)
plotfcn(axes_handle, data1, data2, ...)

第一个绘制到当前坐标区 (gca) 或创建并绘制到一个新坐标区(如果不存在)。第二个使用句柄 axes_handle 绘制到轴中。

查看了几个 MATLAB 和工具箱绘图函数的内部结构后,看起来 MathWorks 并没有真正的标准化方式来执行此操作。一些绘图例程使用内部但开放的函数axescheck 来解析输入参数;有些人对第一个输入参数进行简单检查;有些使用更复杂的输入解析子功能,可以处理更多种类的输入语法。

注意axescheck 似乎使用了ishghandle 的未记录语法——文档说ishghandle 只接受一个输入,如果它是任何Handle Graphics 对象则返回true;但是axescheck 将其称为ishghandle(h, 'axes'),仅当它专门是一个轴对象时才返回true。

是否有人知道实现此语法的最佳实践或标准?如果不是,您认为哪种方式最健壮?

【问题讨论】:

仅供参考:undocumentedmatlab.com/blog/… @Yair - 谢谢你的名字检查! 【参考方案1】:

如果有人仍然感兴趣,在我发布问题四年后,这是我主要确定的模式。

function varargout = myplotfcn(varargin)
% MYPLOTFCN Example plotting function.
%
% MYPLOTFCN(...) creates an example plot.
%
% MYPLOTFCN(AXES_HANDLE, ...) plots into the axes object with handle
% AXES_HANDLE instead of the current axes object (gca).
%
% H = MYPLOTFCN(...) returns the handle of the axes of the plot.

% Check the number of output arguments.
nargoutchk(0,1);

% Parse possible axes input.
[cax, args, ~] = axescheck(varargin:);

% Get handle to either the requested or a new axis.
if isempty(cax)
    hax = gca;
else
    hax = cax;
end

% At this point, |hax| refers either to a supplied axes handle,
% or to |gca| if none was supplied; and |args| is a cell array of the
% remaining inputs, just like a normal |varargin| input.

% Set hold to on, retaining the previous hold state to reinstate later.
prevHoldState = ishold(hax);
hold(hax, 'on')          


% Do the actual plotting here, plotting into |hax| using |args|.


% Set the hold state of the axis to its previous state.
switch prevHoldState
    case 0
        hold(hax,'off')
    case 1
        hold(hax,'on')
end

% Output a handle to the axes if requested.
if nargout == 1
    varargout1 = hax;
end  

【讨论】:

【参考方案2】:

不确定我是否理解这个问题。 我所做的是将数据的绘图与绘图的生成/设置分开。因此,如果我想以标准化方式绘制直方图,我有一个名为 setup_histogram(some, params) 的函数,它将返回适当的句柄。然后我有一个函数update_histogram(with, some, data, and, params),它将数据写入适当的句柄。

如果您必须以相同的方式绘制大量数据,这非常有效。

【讨论】:

【参考方案3】:

旁观的两条建议:

    如果你不需要,不要去无证。 如果一个简单的检查就足够了,这将是我个人的偏好。

【讨论】:

以上是关于为 MATLAB 绘图函数实现多种语法的主要内容,如果未能解决你的问题,请参考以下文章

set()函数在绘图中的应用

Matlab 绘图函数plot类

matlab 函数,matlab 语法2

如何利用matlab实现多种插值

数字图像处理的Matlab实现—灰度变换与空间滤波

matlab如何实现两条曲线之间填充颜色?