Если вы присмотритесь к команде surf
, вы увидите, что вы можете установить пользовательскую «карту цветов», которая затем используется вместо данных Z
в качестве цветной индикатор.
Итак, вам просто нужно настроить правильную «карту цветов». Он должен иметь те же измерения, что и ваши данные X
и Y
, и для каждой точки данных вы должны указать триплет [R, G, B]
по вашему выбору, то есть [0, 1, 0]
для координаты [0, 0]
, [1, 0, 0]
для [1, 1]
координата и некоторая "диагональная" интерполяция между этими двумя.
К счастью, у вас уже есть это, посмотрите на ваши X
и Y
данные! Добавление обоих даст такую «диагональную» интерполяцию для зеленого канала. Обратное из этого даст правильный красный канал. (Масштабирование немного искажено, поскольку у вас есть значения больше 1.0
, но они будут «обрезаны».)
Вот расширенный код:
edges = linspace(0, 1, 10);
[X, Y] = meshgrid(edges);
Z = rand(10);
cm(:, :, 1) = (X + Y); % Red channel
cm(:, :, 2) = 2 - cm(:, :, 1); % Green channel
cm(:, :, 3) = zeros(size(X)); % Blue channel (empty)
h = surf(X, Y, Z, cm); % No need for the FaceColor property
Вывод выглядит так:
Надеюсь, это поможет!