the same plots multiple different matlab plot matlab-figure

same - plot function matlab



Trazar automáticamente diferentes líneas de color (5)

Estoy tratando de trazar varias estimaciones de densidad de kernel en el mismo gráfico, y quiero que todos sean de diferentes colores. Tengo una solución kludged usando una cadena ''rgbcmyk'' y paso a través de cada diagrama por separado, pero empiezo a tener duplicados después de 7 iteraciones. ¿Hay una manera más fácil / más eficiente de hacer esto y con más opciones de color?

for n=1:10 source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data end cstring=''rgbcmyk''; % color string figure hold on for n=1:length(source) [f,x]=ksdensity(source(n).data); % calculate the distribution plot(x,f,cstring(mod(n,7)+1)) % plot with a different color each time end


En realidad, un método abreviado decente para hacer que los colores funcionen es utilizar hold all; en lugar de hold on; . Cada plot sucesiva rotará (automáticamente para usted) a través del mapa de colores predeterminado de MATLAB.

Desde el sitio de MATLAB en hold :

hold all contiene el trazado y el color de línea y el estilo de línea actuales para que los comandos de trazado posteriores no restablezcan los valores de las propiedades ColorOrder y LineStyleOrder al principio de la lista. Los comandos de trazado continúan ciclando a través de los colores y estilos predefinidos desde donde se detuvo el último trazado en la lista.


Puede usar un mapa de colores como HSV para generar un conjunto de colores. Por ejemplo:

cc=hsv(12); figure; hold on; for i=1:12 plot([0 1],[0 i],''color'',cc(i,:)); end

MATLAB tiene 13 diferentes mapas de color nombrados ( ''doc colormap'' los enumera a todos).

Otra opción para trazar líneas en diferentes colores es usar la propiedad LineStyleOrder ; ver Definir el color de las líneas para trazar en la documentación de MATLAB para más información.


Respuesta tardía, pero dos cosas para agregar:

  • Para obtener información sobre cómo cambiar la propiedad ''ColorOrder'' y cómo establecer un valor predeterminado global con ''DefaultAxesColorOrder'' , consulte el "Apéndice" en la parte inferior de esta publicación.
  • Existe una gran herramienta en MATLAB Central File Exchange para generar cualquier número de colores visualmente distintos, si tiene la Caja de herramientas de procesamiento de imágenes para usarlo. Sigue leyendo para más detalles.

La propiedad de axes ColorOrder permite a MATLAB recorrer automáticamente una lista de colores cuando usa hold on/all (nuevamente, consulte el Apéndice a continuación para saber cómo set / get el ColorOrder para un eje específico o globalmente a través de DefaultAxesColorOrder ). Sin embargo, de forma predeterminada, MATLAB solo especifica una lista breve de colores ( solo 7 a partir de R2013b) para pasar, y por otro lado puede ser problemático encontrar un buen conjunto de colores para más series de datos. Para 10 tramas, obviamente no puede confiar en el ColorOrder predeterminado.

Una excelente manera de definir N colores visualmente distintos es con la presentación "Generar colores significativamente distintos perceptibles" (GMPDC) en el intercambio central de archivos de archivos de MATLAB . Se describe mejor en las propias palabras del autor:

Esta función genera un conjunto de colores que se distinguen por referencia al espacio de color "Lab" , que se aproxima más a la percepción del color humano que RGB. Dada una gran lista inicial de colores posibles, selecciona iterativamente la entrada en la lista que está más alejada (en el espacio Lab) de todas las entradas elegidas previamente.

Por ejemplo, cuando se solicitan 25 colores:

La presentación de GMPDC se eligió en el blog oficial de MathWorks como Pick of the Week en 2010 en parte debido a la posibilidad de solicitar una cantidad arbitraria de colores (en contraste con los 7 colores predeterminados de MATLAB). Incluso hicieron la excelente sugerencia de establecer ColorOrder de MATLAB en el inicio para,

distinguishable_colors(20)

Por supuesto, puede configurar el ColorOrder para un solo eje o simplemente generar una lista de colores para usar de la manera que desee. Por ejemplo, para generar 10 "colores máximamente perceptualmente distintos" y usarlos para 10 trazados en el mismo eje ( pero no usando ColorOrder , lo que requiere un ciclo ):

% Starting with X of size N-by-P-by-2, where P is number of plots mpdc10 = distinguishable_colors(10) % 10x3 color list hold on for ii=1:size(X,2), plot(X(:,ii,1),X(:,ii,2),''.'',''Color'',mpdc10(ii,:)); end

El proceso se simplifica y no requiere bucle, con la propiedad del eje ColorOrder :

% X of size N-by-P-by-2 mpdc10 = distinguishable_colors(10) ha = axes; hold(ha,''on'') set(ha,''ColorOrder'',mpdc10) % --- set ColorOrder HERE --- plot(X(:,:,1),X(:,:,2),''-.'') % loop NOT needed, ''Color'' NOT needed. Yay!

APÉNDICE

Para obtener la matriz ColorOrder RGB utilizada para el eje actual,

get(gca,''ColorOrder'')

Para obtener el ColorOrder predeterminado para nuevos ejes,

get(0,''DefaultAxesColorOrder'')

Ejemplo de configuración del nuevo ColorOrder global con 10 colores en el inicio de MATLAB, en startup.m :

set(0,''DefaultAxesColorOrder'',distinguishable_colors(10))


Si todos los vectores tienen el mismo tamaño, crea una matriz y traza. Cada columna se traza con un color diferente automáticamente. Luego puede usar la legend para indicar columnas:

data = randn(100, 5); figure; plot(data); legend(cellstr(num2str((1:size(data,2))'')))

O, si tiene una celda con nombres de kernels, use

legend(names)


Tarde a la fiesta. Estuve investigando esto y acabo de encontrar esta opción de ejes llamada ColorOrder, puede especificar el orden de color para la sesión o solo para la figura y luego solo trazar una matriz y dejar que MATLAB automáticamente recorra los colores especificados.

ver Cambiar el ColorOrder predeterminado

ejemplo

set(0,''DefaultAxesColorOrder'',jet(5)) A=rand(10,5); plot(A);