close all;clear;clc;
[X,Y] = meshgrid(-5:0.5:5);
Z = X.^2 + Y.^2;
[DX,DY] = gradient(Z,.2,.2);
h = quiver(X,Y,DX,DY);
ch = get(h,'Children');
XD = get(ch(1),'XData'); % Datos en X
YD = get(ch(1),'YData'); % Datos en Y
XD(isnan(XD))=[]; % Eliminamos los elementos no numéricos (NaN)
YD(isnan(YD))=[]; % lo mismo
Xdiff = abs(XD(2:2:end)-XD(1:2:end));
Ydiff = abs(YD(2:2:end)-YD(1:2:end));
min_mag = min(sqrt(Xdiff.^2 + Ydiff.^2)); % Magnitud máxima
max_mag = max(sqrt(Xdiff.^2 + Ydiff.^2)); % Magnitud mínima
nc = 24; % Número de colores a utilizar
rangecolor = linspace(min_mag,max_mag,nc); % Intervalo de "posibles" colores
mapcolor = flipud(hsv(nc)); % Mapa de color
figure(); % Creamos una nueva ventana para la gráfica modificada
hold on % Debemos mantener todos los trazos
for i=1:2:length(XD)
dx = XD(i)-XD(i+1);
dy = YD(i)-YD(i+1);
m = sqrt(dx^2+dy^2); % Magnitud del vector actual
% Buscamos el valor correspondiente en el mapa de color
k = find(abs(rangecolor - m) < (max_mag - min_mag)/nc, 1);
% Graficamos utilizando el color seleccionado
plot(XD(i:i+1),YD(i:i+1),'Color',mapcolor(k,:));
end