2017-02-15 11 views
0

У меня есть данные в Matlab, для которых я хочу создать график стиля карты тепла. Обычный способ сделать это - imagesc и, возможно, пользовательскую цветовую карту. (См., Например, принятый ответ на этот вопрос: MATLAB heat map.) Если данные содержат NaN, однако, это не обязательно делает то, что я хочу. MathWorks Documentation утверждает, что для NaN поведение не определено. На практике результат выглядит так, что цвет присваивается наименьшему значению в вашей цветовой карте.Как сделать NaN другим цветом в Matlab с imagsc?

В тех случаях, когда NaN отмечает, что никакого значения не было, это может ввести в заблуждение. Было бы предпочтительнее, чтобы это шоу было чем-то иным, чем цветами в цветовой карте. Как это сделать?

примечание это другой вопрос (Assign different color to NaN values in Matlab images), что несколько похоже. На мой взгляд, это не дубликат, однако, потому что он создает изображение с помощью другого вызова функции, потенциально с его собственными базовыми структурами.

+0

Также связанный с [this] (http://stackoverflow.com/questions/38851267/matlab-imshow-omit-nan/38851344#38851344) – Suever

ответ

0

После нескольких ответов на сайте MathWorks, в которых утверждалось, что это невозможно, я нашел следующее решение: вы можете изменить прозрачность каждого цветового патча, как хотите. Значение по умолчанию заключается в том, чтобы сделать все непрозрачным, но я устанавливаю значения, где данные NaN являются прозрачными. Это отличается от того, что явным образом устанавливаю цвет патча на что-то вне цветовой карты, но он отлично работает, если у вас нет ничего другого на рисунке, который может «показать» и вызвать путаницу. В таких случаях области, соответствующие NaN, кажутся «отверстиями» на поверхности, отображающими фоновый цвет оси. С данными в переменной data и оси значений, приведенных (соответствующие) в x и y:

h = imagesc(x, y, data); 
h.AlphaData = ones(size(h.CData)); 
h.AlphaData(isnan(h.CData)) = 0; 

Первая строка создает изображение, вторая линия устанавливает все участки, чтобы быть непрозрачным, и последние наборы пластыри, соответствующие NaN быть прозрачным. Вторая строка, по-видимому, необходима, несмотря на то, что она воспроизводит поведение по умолчанию, потому что значение по умолчанию для AlphaData является скаляром 1, тогда как мы нуждаемся в его матрице из них для того, чтобы третья строка работала.