пробуем работу Вашей функции pvec на неудобных данных (Y много больше X )
x = [3.2, 1, 2.5, 7.123456, 3, 2];
y = [2.1, 3, 6, 4, 3.5, 2]*100;
[xVec, yVec] = pvec(x,y);
plot(xVec,yVec);
grid on;
for i = 1:numel(x)
text(x(i),y(i),num2str(i));
end
явно не то, что хотелось, и чем больше разница по масштабу у осей - тем страшнее результат
идём другим путём
строим исходный график без стрелочек, для вычисления масштабов
plot(x,y);
если на результирующей картинке этот график не единственный, то добавляем другие построения, если они могут изменить размеры осей
вычисляем отношение масштабов для нашего графика
norm_coef = diff(xlim)/diff(ylim);
компенсируем разницу в масштабах
if(norm_coef<0)
x_norm = x/norm_coef;
y_norm = y;
[xVec, yVec] = pvec(x_norm,y_norm);
xVec = xVec*norm_coef;
yVec = yVec;
else
x_norm = x;
y_norm = y*norm_coef;
[xVec, yVec] = pvec(x_norm,y_norm);
xVec = xVec;
yVec = yVec/norm_coef;
end
выводим график со стрелочками
plot(xVec,yVec);
grid on;
for i = 1:numel(x)
text(x(i),y(i),num2str(i));
end
проверяем, что всё работает при другом отношении масштабов (X много больше Y )
x = [3.2, 1, 2.5, 7.123456, 3, 2]*123;
y = [2.1, 3, 6, 4, 3.5, 2];
plot(x,y);
norm_coef = diff(xlim)/diff(ylim);
if(norm_coef<0)
x_norm = x/norm_coef;
y_norm = y;
[xVec, yVec] = pvec(x_norm,y_norm);
xVec = xVec*norm_coef;
yVec = yVec;
else
x_norm = x;
y_norm = y*norm_coef;
[xVec, yVec] = pvec(x_norm,y_norm);
xVec = xVec;
yVec = yVec/norm_coef;
end
plot(xVec,yVec);
grid on;
for i = 1:numel(x)
text(x(i),y(i),num2str(i));
end