Matlab, Python: исправление цветовой карты к указанным значениям - PullRequest
1 голос
/ 30 января 2012

Это простая, но распространенная задача, необходимая при попытке исправить цветовую карту в соответствии с 2D-матрицей значений.Для демонстрации рассмотрим проблему в Matlab , решение не обязательно должно быть в Matlab (т. Е. Код, представленный здесь, предназначен только для демонстрационных целей).

<code>
x = [0,1,2; 3,4,5; 6,7,8];
imagesc(x)
axis square
axis off
Таким образом, выходные данные выглядят так:
enter image description here
, когда некоторые значения изменяются сверх максимального значения, это выглядит так:
<code>
x = [0,1,2; 3,4,5; 6,7,18];
, что выглядит логично, но создает проблемы, когда мы хотим сравнить/ трассировать элементы на двух картах.Так как ассоциация цветовой карты изменена, почти невозможно найти отдельную ячейку для сравнения / трассировки и т. Д. enter image description here
Решение, которое я реализовал, состоит в том, чтобы замаскировать матрицу как:
<code>
x = [0,1,2; 3,4,5; 6,7,18];
m = 8;
x(x>=m) = m;
, которая работает идеально.
Поскольку предоставленный код требует поиска / фильтрации (это отнимает много времени!), Мне интересно, существует ли общий / более эффективный способ для реализации этого задания в Matlab , Python и т. Д.

Один из случаев, когда возникает эта проблема, - когда у нас много последовательных симуляций, и мы хотим сделать разумную анимацию прогресса;в этом случае каждый цвет должен сохранять свою связь фиксированной.

Ответы [ 3 ]

2 голосов
/ 30 января 2012

В Python с использованием пакета MatPlotLib решение выглядит следующим образом:

<code>
import pylab as pl
x = [[0,1,2],[3,4,5],[6,7,18]]
pl.matshow(x, vmin=0, vmax=8)
pl.axis('image')
pl.axis('off')
show()
Так что vmin и vmax являются граничными пределами для всего диапазона цветовой карты.
2 голосов
/ 30 января 2012

Индексация довольно быстрая, поэтому я не думаю, что вам нужно беспокоиться.

Однако в Matlab вы можете передать аргумент clims в imagesc:

imagesc(x,[0 8]);

Это отображает все значения выше 8 на верхний цвет в цветовой шкале, а все значения ниже 0 - на нижний цвет в цветовой шкале, а затем растягивает шкалу для промежуточных цветов.

imagesc documentation.

1 голос
/ 30 января 2012
f1 = figure;
x = [0,1,2; 3,4,5; 6,7,8];
imagesc(x)
axis square
axis off

limits = get(gca(f1),'CLim');

f2 = figure;
z = [0,1,2; 3,4,5; 6,7,18];
imagesc(z)
axis square
axis off
caxis(limits)
...