Цветовая карта на заказ для контура
У меня есть функция 3D, и я хочу показать контуры на [0.683 0.9545 0.9973]
, Я хочу область 0
->0.683
быть наполненным красным, 0.683
->0.9545
быть синим, 0.9545
->0.9973
быть зеленым и 0.9973
->1.0
быть белым.
Так что в основном у меня есть следующее:
contours = [0.0 0.683 0.9545 0.9973 1.0]
contourf(x,y,z,contours)
и попробовал
colormap([1 0 0; 0 0 1; 0 1 0; 1 1 1])
но это не правильно. Пожалуйста, как должна выглядеть моя цветовая карта, чтобы получить цвета, которые я хочу?
1 ответ
В предположении, я бы сказал, что вам нужно иметь количество строк на цвет, пропорциональное размеру каждого диапазона. Так 0
->0.683
намного больше, чем 0.683
->0.9545
, В вашей цветовой карте вы указали только одну строку, поэтому Matlab предполагает, что эти цвета должны назначаться одинаково во всем диапазоне (т.е. 0
->1
) что с 4 цветами означает, что красный для 0
->0.25
синий для 0.25
->0.5
так далее...
Попробуйте что-то вроде этого ответа: Как создать собственную цветовую карту программно? но вместо того, чтобы использовать linspace
использовать repmat
, Вам нужно будет иметь достаточно строк, чтобы учесть точность до 4 десятичных знаков (которую вы, возможно, захотите переосмыслить), так что в общей сложности у вас будет 10 000 строк:
red = repmat([1 0 0], 6830, 1);
blue = repmat([0 0 1], 9545 - 6830, 1);
green = repmat([0 1 0], 9973 - 9545, 1);
white = repmat([1 1 1], 10000 - 9973 , 1);
map = [red;blue;green;white];
colormap(map);
или альтернативно:
map = zeros(10000,3);
map(1:6830,1) = 1;
map(6831:9545,3) = 1;
map(9546:9973,2) = 1;
map(9974:end,:) = 1;