Estoy tratando de trazar varias estimaciones de densidad del kernel en el mismo gráfico y quiero que todas sean de diferentes colores. Tengo una solución kludged que usa una cadena 'rgbcmyk'y la paso por cada trama por separado, pero empiezo a tener duplicados después de 7 iteraciones. ¿Existe una forma más fácil / 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
matlab
plot
matlab-figure
Doresoom
fuente
fuente

hold ones funcionalmente equivalente ahold all. Sin embargo, permanece la cuestión de cómo obtener más de los 7 colores predeterminados. Un mapa de colores predeterminado puede ser una solución como la describe Azim o se puede usar una función para generar colores ajustados para una fácil discriminación visual, como se muestra a continuación .hold all, obtengo gráficos en diferentes colores (aunque debo decir que se ven bastante aburridos), mientras que cuando lo usohold on, todos mis gráficos se vuelven azules. Entonces me pregunto qué es la equivalencia funcional.hold onofrece gráficos de diferentes colores. Estás usando una versión anterior. De los documentos actuales , "hold alles lo mismo quehold on. Nota: esta sintaxis se eliminará en una versión futura. Utilizar en suhold onlugar". Consulte también las notas de la versión .Respuestas:
Puede utilizar un mapa de colores como HSV para generar un conjunto de colores. Por ejemplo:
MATLAB tiene 13 mapas de colores con nombres diferentes ( 'doc colormap' los enumera todos).
Otra opción para trazar líneas en diferentes colores es usar la propiedad LineStyleOrder ; consulte Definición del color de las líneas para el trazado en la documentación de MATLAB para obtener más información.
fuente
hold allsolución de @Mark Elliot debido a su versatilidad de poder elegir diferentes mapas de colores.En realidad, un método de atajo decente para hacer que los colores cambien es usar
hold all;en lugar dehold on;. Cada sucesivoplotrotará (automáticamente para usted) a través del mapa de colores predeterminado de MATLAB.Desde el sitio de MATLAB en
hold:fuente
Respuesta tardía, pero dos cosas para agregar:
'ColorOrder'propiedad y cómo establecer un valor predeterminado global con'DefaultAxesColorOrder', consulte el "Apéndice" al final de esta publicación.La
ColorOrderaxespropiedad permite MATLAB para el ciclo de forma automática a través de una lista de colores cuando se utilizahold on/all(de nuevo, véase el Apéndice continuación para saber cómoset/getlaColorOrderde un eje específico o de forma global a travésDefaultAxesColorOrder). Sin embargo, de forma predeterminada, MATLAB solo especifica una lista corta de colores ( solo 7 a partir de R2013b) para recorrer y, por otro lado, puede ser problemático encontrar un buen conjunto de colores para más series de datos. Para 10 parcelas, obviamente no puede confiar en el valor predeterminadoColorOrder.Una excelente manera de definir N colores visualmente distintos es con el envío "Generar colores máximos perceptualmente distintos" (GMPDC) en MATLAB Central File File Exchange . Se describe mejor en las propias palabras del autor:
Por ejemplo, cuando se solicitan 25 colores:
La presentación de GMPDC fue elegida en el blog oficial de MathWorks como Elección de la semana en 2010 en parte debido a la capacidad de solicitar una cantidad arbitraria de colores (en contraste con los 7 colores predeterminados de MATLAB integrados). Incluso hicieron la excelente sugerencia de configurar MATLAB en
ColorOrderel inicio en,Por supuesto, puede configurar el
ColorOrderpara un solo eje o simplemente generar una lista de colores para usar de la manera que desee. Por ejemplo, para generar 10 "colores máximos perceptualmente distintos" y usarlos para 10 gráficos en el mismo eje ( pero sin usarColorOrder, por lo que se requiere un bucle ):El proceso se simplifica, sin necesidad de
forbucle, con laColorOrderpropiedad del eje :APÉNDICE
Para obtener la
ColorOrdermatriz RGB utilizada para el eje actual,Para obtener el valor predeterminado
ColorOrderpara ejes nuevos,Ejemplo de configuración de nuevo global
ColorOrdercon 10 colores en MATLAB start, enstartup.m:fuente
Tarde a la fiesta. Estaba investigando esto yo mismo 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 trazar una matriz y dejar que MATLAB recorra automáticamente los colores especificados.
consulte Cambiar el orden de color predeterminado
ejemplo
fuente
set(gca,'ColorOrder',jet(5));Si todos los vectores tienen el mismo tamaño, cree una matriz y trace una gráfica. Cada columna se traza con un color diferente automáticamente. Luego, puede usar
legendpara indicar columnas:O, si tiene una celda con nombres de kernel, use
fuente