2016-08-27 6 views
0

У меня есть две оси: одна для просмотра изображений, а другая для построения графиков. Я получаю эту ошибку, когда пытаюсь указать, какие оси я хочу построить данные: Error using plot. A numeric or double convertible argument is expected при попытке plot(handles.axis,curve,x,y).Как указать оси при использовании функции `fit`

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, чтобы попробовать его. Как можно скорректировать код, чтобы указать оси?

ответ

1

plot in the curve fitting toolbox не то же самое, что MATLAB's base plot. Хотя есть документированный синтаксис для указания родительских осей для объектов sfit, похоже, что нет объектов для cfit объектов, которые будут возвращены вызовом fit в этом случае.

Однако из документации мы видим, что:

plot(cfit) участки в cfit объект на области текущих осей, если любой

Итак, если current axis установлен до 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); 
+0

Ваше решение выглядит точно так же, как и ошибочный код сверху. Могут ли оси указываться даже при использовании 'plot' в панели инструментов для подбора кривой? – Senyokbalgul

+0

@Senyokbalgul Я обновил свой ответ, я не заметил, что MATLAB сделал различие между построением объектов 'sfit' и' cfit'. – excaza

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.

Смежные вопросы