Чтобы заполнить поверхность, вам нужно использовать команду patch .
t = linspace(0, 2*pi, 100);
x = cos(t);
y = sin(t);
c = x; % colored following x value and current colormap
figure
patch(x,y,c)
hold on
scatter(x,y)
hold off
colorbar
Результирующий график:

Цвета определены в c для каждой точки и интерполируются внутри фигуры, поэтому я уверен, что у вас должна быть всякая свобода цвета, как вы хотите!
Например, повернутая версия:
t = linspace(0, 2*pi, 100);
x = cos(t);
y = sin(t);
c = cos(t+pi/4)
figure
patch(x,y,c)
colorbar

Чтобы понять, как это происходит, просто подумайте, что у каждой точки есть цвет, и матрица интерполируется внутри. Итак, здесь я просто повернул интенсивность на точку на pi /4.
Чтобы это работало, вам нужно иметь заполненную форму, и вам может потребоваться настроить параметр color (c) так, чтобы он соответствовал вашим потребностям. Например, если направление вашего градиента закодировано в векторе, вы хотите спроецировать всю свою точку на этот вектор, чтобы получить значение вдоль градиента для всех точек.
Например:
% v controls the direction of the gradient
v = [0.1, 1];
t = linspace(0, 2*pi, 100);
F = exp(-cos(t))./(2.*pi*besseli(1,1));
% reconstructing point coordinate all around the surface
% this closes the path so with enough points so that interpolation works correctly
pts = [[t', F']; [t(end:-1:1)', ones(size(t'))*min(F)]];
% projecting all points on the vector to get the color
c = pts * (v');
clf
patch(pts(:,1),pts(:,2),c)
hold on
scatter(t, F)
hold off
