2014-11-20 4 views
-1

Я пытаюсь рисовать кривые ROC с использованием существующего набора значений с помощью следующей командыКак построить кривую линию в MATLAB, используя множество точек

plot(X1,Y1,'--rs',X2,Y2,'-*g'); 

Где X1, Y1, X2 и Y2 являются матрицами одинакового размера

Однако линии, созданные этой командой, являются прямыми.

Как я могу сделать их изогнутыми линиями.

Благодаря Азиз

+1

'plot' всегда объединяет данные с прямыми линиями. Обычная prodecure - иметь точки данных так близко друг к другу, что вы не заметите –

+0

Я написал для вас ответ. Вам нужна дополнительная помощь? – rayryeng

ответ

2

MATLAB по умолчанию использует аппроксимацию прямой линии, чтобы сделать свой график между контрольными точками. Если вы хотите, вы можете интерполировать между точками, чтобы создать более реалистичный график. Попробуйте использовать interp1 с опцией 'spline' и посмотрите, как это происходит. Таким образом, выведите минимальные и максимальные значения как X1, так и X2, затем определите сетку точек между минимумом и максимумом, которые имеют более тонкую детализацию. Как только вы сделаете это, бросьте это в interp1 и постройте свою кривую. Что-то вроде:

%// Find dynamic range of domain for both Xs 
minX1 = min(X1); 
maxX1 = max(X1); 
minX2 = min(X2); 
maxX2 = max(X2); 

%// Generate grid of points for both Xs 
x1Vals = linspace(minX1, maxX1, 100); 
x2Vals = linspace(minX2, maxX2, 100); 

%// Interpolate the curves 
y1Vals = interp1(X1, Y1, x1Vals, 'spline'); 
y2Vals = interp1(X2, Y2, x2Vals, 'spline'); 

%// Plot the results 
plot(x1Vals,y1Vals,'--rs',x2Vals,y2Vals,'-*g'); 

linspace генерирует сетку точек от одного конца к другому, и я указал 100 из этих точек. Затем я использую interp1 так, как мы говорили о том, где вы указываете контрольные точки (X1,Y1,X2,Y2), затем укажите значения, с которыми я хочу интерполировать. Я использую выходные значения после интерполяции и рисую кривую.