2011-12-12 9 views

Respuesta

15

valores NaN obtener el primer color de los ejes mapa de colores, que por defecto corresponde al valor mínimo (que no sea NaN). Puede cambiar el color para el valor mínimo que establece los límites de color de los ejes con la función CAXIS. Para asignar un color de contraste a los valores NaN, puede agregar un color especial para los valores NaN como primer color (vector 1x3).

Puedo tomar su ejemplo e hicieron una función (con algunos comentarios):

function [h hcb] = imagescwithnan(a,cm,nanclr) 
% IMAGESC with NaNs assigning a specific color to NaNs 

%# find minimum and maximum 
amin=min(a(:)); 
amax=max(a(:)); 
%# size of colormap 
n = size(cm,1); 
%# color step 
dmap=(amax-amin)/n; 

%# standard imagesc 
him = imagesc(a); 
%# add nan color to colormap 
colormap([nanclr; cm]); 
%# changing color limits 
caxis([amin-dmap amax]); 
%# place a colorbar 
hcb = colorbar; 
%# change Y limit for colorbar to avoid showing NaN color 
ylim(hcb,[amin amax]) 

if nargout > 0 
    h = him; 
end 

Aquí CAXIS instrucción asigna el primer color del mapa de color no al valor mínimo amin, sino a la amin-dmap. Entonces, el primer color se asigna específicamente a NaN.


Pruebe esta función con:

a=peaks; 
a(a < 0.5) = nan; 
imagescwithnan(a,hot,[0 1 1]) %# [0 1 1] is cyan 

test image - NaN color is hidden

Si usted comenta la declaración ylim en la función (puede ser el control con el parámetro adicional) este color NaN estará en el mapa de colores.

test image - NaN color is shown on the colorbar

2

Hay 2 pasos generales para el uso de múltiples mapas de colores como esto:

  1. Pila del nuevo mapa de colores con la antigua.
  2. Cambie los nuevos valores que desea asignar a este nuevo mapa de colores para que la relación de rango (datos nuevos) a rango (datos antiguos) sea igual que nrow (nuevo mapa de colores) a nrow (mapa de colores antiguo).

Esto correlacionará con éxito los nuevos datos al nuevo mapa de color, mientras que al mismo tiempo correlaciona los datos anteriores con el antiguo mapa de colores (es decir, no altera los colores de los datos antiguos). También tenga en cuenta que una copia de los datos se almacena con la imagen, por lo que podemos hacer este cambio sin alterar los valores originales.

Un ejemplo simplificado:

% Make image data 
img = -5:5; 

% Plot with original colormap 
figure 
imagesc(img); 
colormap(hot(8)) 

% Add in an NaN 
img(3) = NaN; 

% Make new colormap 
n = 8; 
cols = [0 0 1 %blue 
     hot(n)]; 

% Plot with new colormap 
figure 
h = imagesc(img); 
colormap([0 0 1; hot(8)]) 

% Scale data so that the range proportions match the colormap sizes 
cdata = get(h, 'CData'); 
img_range = range(cdata(:)); 
cdata(isnan(cdata)) = min(cdata(:)) - img_range/n; 
set(h, 'CData', cdata); 

enter image description here

enter image description here

0

Esta pregunta se presenta por primera vez en mi motor de búsqueda, pero he encontrado una respuesta mucho más preferible en this posterior así que pensé lo incluiría aquí.

En resumen, utilice la siguiente:

imagesc(Z,'AlphaData',~isnan(Z)) 

Alternativamente, tenga en cuenta que pcolor ignora nan s por defecto.

Cuestiones relacionadas