Цветовая карта на заказ для контура

У меня есть функция 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;
Другие вопросы по тегам