Me gustaría mostrar un no-uniforme colorbar como en la primera foto. He probado el código de abajo. ‘mycamp4’ es un mapa de colores guarda manualmente. El resultado se muestra como la segunda figura. El número 0.1 y 1.5 será demasiado cerrado, demasiado ver. Cómo puedo hacer que el colorbar como en la primera foto?

v = [0.1 1 1.5 5 7.5 10 30];
v_2 = [0.1 1.5 5 7.5 10 30];
contourf(X,Y,pdf_normal',v);
h = colorbar;
load('MyColormaps','mycmap4');
set(gcf,'Colormap',mycmap4);
set(h, 'YTick', v_2)

Imagen 1:

Cómo generar una no-lineal de mapa de colores/colorbar?

Imagen 2:

Cómo generar una no-lineal de mapa de colores/colorbar?

tal vez esto ayuda a: logarítmica colorbar
Quieres decir que te quiero no uniforme mapa de colores? colorbar normalmente sólo muestra lo que colormap es. Supongo que has probado colormapeditor. Usted debe buscar personalizado mapa de colores en el Archivo de Intercambio.
Nota al margen, La barra en la primera foto parece tener valores por encima de 30, mientras que el segundo colorbar sólo muestra valores de hasta 30.
Creo que no están relacionados. Tan sólo algunos ejemplos.

OriginalEl autor user2230101 | 2013-12-16

4 Comentarios

  1. 9

    Aquí una explicación paso a paso.

    Primero, considere el siguiente ejemplo:

    [X,Y,Z1] = peaks;
    
    figure(1)
    [~,h1] = contourf(X,Y,Z1,20);
    a1 = colorbar;
    colormap(jet)
    caxis([-6,6])

    que le dará la siguiente parcela:

    Cómo generar una no-lineal de mapa de colores/colorbar?

    Dispone de datos lineales y lineales de mapa de colores. Ahora quiero escala de la Zde Datos para obtener los no-lineal como en su caso. Elegí un simple cuadrado de los datos.

    Z2 = get(h1,'ZData');
    scalefactor = @(x) sign(x).*x.^2;
    Z2 = scalefactor(Z2);

    Eso es el ejemplo real de datos, similar a la suya:

    figure(2)
    [~,h2] = contourf(X,Y,Z2,20);
    a2 = colorbar;
    colormap(jet)
    caxis([-6^2,6^2])

    Cómo generar una no-lineal de mapa de colores/colorbar?

    Ahora hemos de datos no lineales, pero todavía lineal colormap y colorbar.

    Hasta ahora todo iba a generar datos de ejemplo similar a la suya.


    Ahora la respuesta real:

    Obtener los datos de la parcela:

    Z3 = get(h2,'ZData');

    y la escala con una relación esperemos que saber más o menos:

    descalefactor = @(x) sign(x).*abs(x).^(1/2);
    Z3 = descalefactor(Z3);

    Parcela de que la escala de los datos:

    figure(3)
    [~,h3] = contourf(X,Y,Z3,20);
    a3 = colorbar;
    colormap(jet)
    caxis([-6,6])

    obtener la Y-Ticks y scale it with the inverse function, como sus datos:

    ticks = get(a3,'YTick');
    ticks = scalefactor(ticks);

    conjunto de estos inversly escala colorbar garrapatas:

    set(a3,'YTickLabel',ticks)

    y finalmente en un aparentemente lineal de la trama (pero usted puede copias de seguridad de sus datos no lineales de antes), con una no lineal mapa de colores y colorbar garrapatas.

    Cómo generar una no-lineal de mapa de colores/colorbar?

    Como era de esperar, la parcela tiene el mismo aspecto como en el primer ejemplo, pero con una escala de colorbar eje.

    Si usted no tiene ninguna relación funcional, trate de conseguir uno, por ejemplo, con el ajuste de curvas caja de herramientas.

    Hola @thewaywewalk, Muchas gracias!! Parece de trabajo. Voy a tener una oportunidad!
    Nota rápida: he encontrado que si usted cambia el tamaño de la ventana de tal forma que el número de marcas de graduación en el colorbar cambios, que ya no coincide correctamente con el colorbar (de hecho, se repiten a sí mismos si un nuevo tick es agregado). Usted tiene que cambiar la escala de la colorbar de nuevo después de cambiar el tamaño de la figura.
    esto es cierto, esta es la razón por la que usted debe crear de la figura ya en el tamaño correcto.

    OriginalEl autor thewaywewalk

  2. 1

    Puede personalizar el mapa de colores y las garrapatas en el colorbar, pero la colorbar en sí se basa en el lineal de los intervalos y usted no puede cambiar eso.

    Hay una solución, aunque.

    digamos que usted quiere que su colorbar igual que en la foto 1 con N no lineal de los intervalos (por ejemplo, color_limits = [1 2 20], si N=2).
    usted tiene que:

    1) definir otra variable para los datos. por ejemplo,

    data2 = nan(size(data));
    for i=1:N
       b = data>color_limits(i) & data>=color_limits(i+1);
       data2(b) = i-0.5;
    end

    Que básicamente son el agrupamiento de los datos, utilizando los intervalos en color_limits, en una variable diferente data2 que mostrará

    2) hacer que su imagen de data2

    3) definir el colorbar límites: caxis([0 N])

    4) definir un mapa de colores con N colores, por ejemplo, mapa de colores(jet(N))

    5) personalizar las garrapatas en el colorbar

    OriginalEl autor Yan

  3. 0

    Cuando intenta doc colorbar usted encontrará una referencia al mapa de colores. Y después de intentar doc colormap que básicamente dan 3 opciones para configurar el mapa de color.

    1. Entrar en un mapa (por ejemplo obtenida por get o uno diseñado con anterioridad, esto es lo que has intentado)
    2. Seleccione incorporado un mapa de colores con el Editor de propiedades.
    3. Utilizar el Editor de mapa de colores, accesible desde Editar > mapa de colores en el menú figura.

    @horchler ya se ha mencionado, pero supongo que usted no ha oído hablar de la el editor de mapa de colores antes. Por lo tanto creo que la opción 3 es la más adecuada para usted.

    Queridos Dennis, Muchas gracias por su respuesta. En realidad he tratado de mapa de colores ediotor («mycmap4» en mi código original). Pero no se cambia la escala de la colorab. Por ejemplo, quiero que la distancia entre 0.1 a 1 a a ser la misma que entre 1 a 2.5. Creo que la escala del registro de colorbar mencionado por @thewaywewalk está cerca de lo que quiero. Pero lo que necesito no es una escala logarítmica, sino una «medida» de la escala.
    La única forma que tengo de ver a continuación, es para alinear sus datos completamente, con la relación que se propone. Y, a continuación, use custom rótulos de marcas de graduación.

    OriginalEl autor Dennis Jaheruddin

  4. 0

    uno puede intentar Recolor_contourf. Se dispone de dos funciones y fácil de usar.
    En su ayuda el ejemplo dado de la siguiente manera. La función es presentada por mí. déjeme saber si se enfrentan a cualquier problema

    X=1:10;Y=1:10;
    C=rand(10,10)*150;
    c=colormap(jet(7));
    L=[10 20 50 60 70 100];
    [cdd hc]=contourf(X,Y,C,[-5 L]);
    Recolor_contourf(hc,c,L,'vert');

    OriginalEl autor makarand kulkarni

Dejar respuesta

Please enter your comment!
Please enter your name here