Estoy tratando de trazar varias estimaciones de densidad de kernel en el mismo gráfico, y quiero que todas sean diferentes colores. Tengo un kludged solución mediante una cadena 'rgbcmyk' y paso a paso a través de ella para cada parcela independiente, pero empiezo a tener duplicados después de 7 iteraciones. Hay una manera más fácil/más eficiente manera 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
  • Intenta simplemente haciendo «aguanta todo»? Que dibuja automáticamente noticias de colores para cada nueva trama de comando.
  • «aguanta todo» no es una respuesta a la pregunta, pero puede ser una solución para muchas personas terminan aquí porque un simple «hold on» atrae a todas las curvas en azul. Muchas Gracias a @twerdster !
  • Como de R2014b, la costumbre hold on es funcionalmente equivalente a hold all. Sin embargo, la cuestión de cómo conseguir más de los 7 colores por defecto sigue siendo. Un defecto mapa de color puede ser una solución, como se describe por Azim o una función para generar colores atentos para facilitar la discriminación visual puede ser utilizado, siguiente.
  • Cuando yo uso hold all puedo obtener parcelas en diferentes colores (aunque debo decir que se ven bastante aburrido), mientras que cuando yo uso hold on, todos mis parcelas de convertirse en azul. Así que me pregunto qué equivalencia funcional es.
  • hold on simplemente se evita MATLAB borrar el anterior parcelas al hacer un nuevo plot llamada. hold all asigna nuevos atributos para las llamadas posteriores a la trama así.
  • En R2014b y más reciente,hold on da color diferentes parcelas. Estás usando y la versión anterior. Desde el actual docs, «hold all es el mismo que hold on. Nota: Esta sintaxis se quitará en una versión futura. Uso hold on en su lugar.» Véase también las notas de la versión.
  • El único caso en el que el comportamiento anterior tendría lugar si es graphicsversion('handlegraphics') devuelve true, indicando MATLAB ejecuta con el mango viejo sistema de gráficos.
  • Ah! Gracias! Sí, mi Matlab versión puede no ser la más reciente.

InformationsquelleAutor Doresoom | 2010-01-08

5 Comentarios

  1. 130

    Puede utilizar un mapa de colores tales como el VHS 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 denominado colormaps (‘doc mapa de colores’ listas de todos ellos).

    Otra opción para el trazado de líneas en diferentes colores es utilizar el LineStyleOrder propiedad; ver Definir el Color de las Líneas de Trazado en la documentación de MATLAB para obtener más información.

    • Estaba buscando. Bien @Azim.
    • Para la posteridad amor, decidí aceptar esta respuesta sobre @Mark Elliot del hold all solución debido a su versatilidad de poder elegir diferentes mapas de colores.
    • ¿Cómo puedo hacer que funcione el uso de «línea» de la trama de comandos en lugar de la trama ?
  2. 106

    En realidad, un decente método de acceso directo para la obtención de los colores para el ciclo es para uso hold all; en lugar de hold on;. Cada una de las sucesivas plot va a rotar (automáticamente) a través de MATLAB por defecto del mapa de colores.

    De MATLAB sitio en mantenga pulsado:

    hold all sostiene la trama y de la actual línea de color y estilo de línea para que el posterior trazado de comandos no se restablece el ColorOrder y LineStyleOrder valores de propiedad en el principio de la lista. Trazado de los comandos siguen en bicicleta a través de los colores predefinidos y linestyles de donde la última parcela se detuvo en la lista.

    • hold all es ser obsoleto. hold on conservará su funcionalidad….
  3. 33

    Tarde la respuesta, pero dos cosas que añadir:

    • Para obtener información sobre cómo cambiar la 'ColorOrder' de la propiedad y de cómo establecer un valor predeterminado global con 'DefaultAxesColorOrder', consulte el «Apéndice» en la parte inferior de este post.
    • Hay una gran herramienta en MATLAB Central de Intercambio de Archivos para generar cualquier número de discapacitados colores distintos, si usted tiene el Procesamiento de la Imagen caja de herramientas a utilizar. Siga leyendo para obtener más detalles.

    La ColorOrder ejes de la propiedad permite MATLAB para recorrer automáticamente una lista de los colores cuando se utiliza hold on/all (de nuevo, véase el Apéndice a continuación para saber cómo set/get la ColorOrder para un eje específico o global a través de DefaultAxesColorOrder). Sin embargo, por defecto MATLAB sólo especifica una lista corta de colores (sólo 7 como de R2013b) para recorrer, y por otro lado puede ser problemático para encontrar un buen conjunto de colores para más series de datos. Por 10 parcelas, obviamente, no puede basarse en el valor predeterminado ColorOrder.

    Una gran manera de definir N visualmente distintos colores es con el «Generar el Máximo de Percepción-Colores Distintos» (GMPDC) presentación en el MATLAB Central de Archivo de Intercambio de Archivos. Es mejor descrito por el autor propias palabras:

    Esta función genera un conjunto de colores que se distinguen por la referencia a la «De laboratorio» espacio de color, que se asemeja más humana la percepción del color de RGB. Dado un primer gran lista de posibles colores, de forma iterativa, elige la entrada en la lista que está más lejos (en el espacio de Laboratorio) a partir de todo lo anteriormente elegido entradas.

    Por ejemplo, cuando el 25 de colores se pide:

    Automáticamente trazar diferentes líneas de color

    La GMPDC presentación fue elegida en MathWorks’ blog oficial como Selección de la Semana en 2010, en parte debido a la capacidad para solicitar un número arbitrario de colores (en contraste con MATLAB construido en 7 colores por defecto). Incluso hicieron la excelente sugerencia para establecer de MATLAB ColorOrder en el inicio,

    distinguishable_colors(20)

    Por supuesto, usted puede establecer la ColorOrder para un solo eje o simplemente generar una lista de colores para utilizar en cualquier forma que te gusta. Por ejemplo, para generar 10 «máximo perceptualmente-colores distintos y los uso para 10 parcelas en el mismo eje (pero no el uso de ColorOrder, por lo que se requiere de un bucle):

    % 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, que no requiere for bucle, con la ColorOrder eje de propiedad:

    % X de tamaño N-a-P-a-2 
    mpdc10 = distinguishable_colors(10) 
    ha = ejes; mantenga pulsado el botón(ja,'on') 
    set(ja,'ColorOrder',mpdc10) % --- set ColorOrder AQUÍ --- 
    plot(X(:,:,1),X(:,:,2),'-.') % bucle NO es necesario, 'Color' NO es necesario. Yay! 
    

    APÉNDICE

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

    get(gca,'ColorOrder')

    Para obtener el valor predeterminado ColorOrder para los nuevos ejes,

    get(0,'DefaultAxesColorOrder')

    Ejemplo de creación de nuevas global ColorOrder con 10 colores en MATLAB inicio, en startup.m:

    set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
    • Sólo una nota, este parece requerir el Procesamiento de la Imagen caja de herramientas.
    • Gracias por la info. He actualizado el post.
  4. 12

    Tarde a la fiesta. Yo estaba buscando en mí mismo y acabo de encontrar acerca de este ejes opción llamada ColorOrder
    usted puede especificar el color del fin de la sesión o simplemente para la figura y, a continuación, una gráfica de una matriz y dejar de MATLAB automáticamente ciclo a través de los colores especificados.

    ver Cambiar el valor Predeterminado de ColorOrder

    ejemplo

    set(0,'DefaultAxesColorOrder',jet(5))
    A=rand(10,5);
    plot(A);
    • que es lo que dijo en su discurso
    • Un eje: set(gca,'ColorOrder',jet(5));
    • excelente solo para informar acerca de jet(el número) que no requiere ningún tipo de lujo cajas de herramientas
  5. 4

    Si todos los vectores tienen igual tamaño, crear una matriz y una gráfica.
    Cada columna se representa con un color diferente automáticamente
    A continuación, puede utilizar legend para indicar las columnas:

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

    O, si usted tiene un celular con granos de nombres, utilice

    legend(names)

Dejar respuesta

Please enter your comment!
Please enter your name here