0

我有两个轴:一个用于查看图像,另一个用于绘制图形。当我尝试指定要在哪些轴上绘制数据时出现此错误:Error using plot. A numeric or double convertible argument is expected尝试plot(handles.axis,curve,x,y).

figure
handles.axis = gca;
x = 1:10;
y = 1:10;
curve = fit(x',y','linearinterp');
plot(curve,x,y) % works fine
plot(handles.axis,curve,x,y) % doesn't work
plot(curve,x,y,'Parent',handles.axis)  % doesn't work

您可以将此示例粘贴到 Matlab 中进行尝试。如何更正代码以指定轴?

4

2 回答 2

1

plot曲线拟合工具箱中的与MATLAB 的 baseplot不一样。尽管有一个文档化的语法用于指定对象的父轴sfit,但似乎没有一个用于对象的语法,在这种情况下,您的调用cfit将返回该语法。fit

但是,从文档中我们看到:

plot(cfit)cfit在当前坐标区的域上绘制对象(如果有)

因此,如果在调用之前设置了当前轴plot,它应该可以按需要工作。这可以通过修改图形的CurrentAxes属性或axes使用轴对象的句柄作为输入来调用来完成。

% Set up GUI
h.f = figure;
h.ax(1) = axes('Parent', h.f, 'Units', 'Normalized', 'Position', [0.07 0.1 0.4 0.85]);
h.ax(2) = axes('Parent', h.f, 'Units', 'Normalized', 'Position', [0.55 0.1 0.4 0.85]);

% Set up curve fit
x = 1:10;
y = 1:10;
curve = fit(x', y', 'linearinterp');  % Returns cfit object

axes(h.ax(2));  % Set right axes as CurrentAxes
% h.f.CurrentAxes = h.ax(2);  % Set right axes as CurrentAxes
plot(curve, x, y);
于 2016-08-27T16:46:21.273 回答
1

我将我的答案细化如下:

看起来plot中的函数不喜欢一个轴后跟两个向量的拟合对象。在这种情况下,我会做这样的事情:

x = 1:10;
y = 1:10;
figure % new figure
ax1 = subplot(2,1,1);
ax2 = subplot(2,1,2);

curve = fit(x',y','linearinterp');
plot(ax1,x,curve(x));
hold on;plot(ax1,x,y,'o') % works fine

plot(ax2,x,curve(x));
hold on;plot(ax2,x,y,'o') % works fine

实际上,诀窍是提供x然后curve(x)作为两个向量而不将整个拟合对象提供给plot函数。

于 2016-08-27T18:39:53.070 回答