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 on
es 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 on
ofrece gráficos de diferentes colores. Estás usando una versión anterior. De los documentos actuales , "hold all
es lo mismo quehold on
. Nota: esta sintaxis se eliminará en una versión futura. Utilizar en suhold on
lugar". 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 all
solució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 sucesivoplot
rotará (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
ColorOrder
axes
propiedad 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
/get
laColorOrder
de 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
ColorOrder
el inicio en,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á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
for
bucle, con laColorOrder
propiedad del eje :APÉNDICE
Para obtener la
ColorOrder
matriz RGB utilizada para el eje actual,Para obtener el valor predeterminado
ColorOrder
para ejes nuevos,Ejemplo de configuración de nuevo global
ColorOrder
con 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
legend
para indicar columnas:O, si tiene una celda con nombres de kernel, use
fuente