Tengo algunos datos (en función de dos parámetros) que se almacenan en un formato de matlab, y me gustaría utilizar matlab para trazar la misma. Una vez que he leído los datos, yo uso mesh() para hacer un complot. Mi mesh() trama me da el valor de la función como un color y una altura de la superficie, como este:

¿Cómo puedo hacer un

Lo matlab trazado de la función se debe usar para hacer una malla 2D de la parcela donde la variable dependiente es representado como sólo un color? Estoy buscando algo como pm3d map en gnuplot.

  • ¿Cómo es el programa gnuplot función diferente de la de Matlab malla? Con Malla de color es proporcional a la altura de la superficie.
  • No quiero una superficie; sólo quiero un mapa 2D con colores.
InformationsquelleAutor Dan | 2013-04-02

4 Comentarios

  1. 42

    Por defecto mesh será el color de la superficie de valores basados en el (valor predeterminado) jet mapa de colores (es decir, el calor es mayor). Puede utilizar además surf para el llenado de la superficie de los parches y establecer el 'EdgeColor' propiedad 'None' (por lo tanto el parche bordes no son visibles).

    [X,Y] = meshgrid(-8:.5:8);
    R = sqrt(X.^2 + Y.^2) + eps;
    Z = sin(R)./R;
    
    % surface in 3D
    figure;
    surf(Z,'EdgeColor','None');

    ¿Cómo puedo hacer un

    Mapa 2D: Usted puede obtener un mapa 2D por el cambio en el view de la propiedad de la figura

    % 2D map using view
    figure;
    surf(Z,'EdgeColor','None');
    view(2);    

    ¿Cómo puedo hacer un

    … o el tratamiento de los valores en Z como una matriz, viéndolo como una imagen en escala de uso de imagesc y la selección de un apropiado mapa de colores.

    % using imagesc to view just Z
    figure;
    imagesc(Z); 
    colormap jet; 

    ¿Cómo puedo hacer un

    La paleta de colores del mapa es controlado por colormap(map), donde map pueden ser personalizadas o en cualquiera de los integrados en colormaps proporcionada por MATLAB:

    ¿Cómo puedo hacer un

    Actualizar y Refinar el mapa: Varias opciones de diseño en el mapa (resolución, suavizado, eje, etc.) puede ser controlado por las opciones de MATLAB. Como @Floris señala, aquí es un alisado, la igualdad de eje, sin etiquetas de eje mapas, adaptado a este ejemplo:

    figure;
    surf(X, Y, Z,'EdgeColor', 'None', 'facecolor', 'interp');
    view(2);
    axis equal; 
    axis off;

    ¿Cómo puedo hacer un

    • Muy bonita respuesta (+1). Si agrega 'facecolor', 'interp' como un nombre adicionales de la propiedad, usted podría obtener más suaves de la interpolación de los colores en lugar de los bloques de la apariencia que usted está recibiendo ahora… Además, si los vectores que describen X e y las dimensiones son xv y yv, usted puede obtener los ejes a escala con imagesc(xv, yv, Z); o gire el eje x e y etiquetado con axis off. Obtendrá la X y la y el escalado a ser el mismo con axis image – impide que las imágenes se estira. Por último, si los datos empieza a no estar en una cuadrícula regular, usted desea utilizar el griddata función para volver a muestrear.
    • grandes puntos a todos! Se actualizará para reflejar algunos. Muchos de estos y de opciones similares, aunque (resolución, grueso o fino, de cuadrícula regular, etc.) dependerá de la representación de datos y las necesidades de la asignación.
    • Gracias y tienes razón. Pero cosas como la interpolación de ayuda, incluso con el grueso de los datos y obtención de los ejes para reflejar la escala de X y de y correctamente está en mi mente esencial. Si usted no ponga la etiqueta de la derecha, no etiquetarlos a todos (axis off). Su respuesta fue tan buena, yo quería ayudar a hacer que sea aún mejor.
  2. 19

    gevang la respuesta es excelente. Hay otra forma de hacerlo directamente mediante pcolor. Código:

    [X,Y] = meshgrid(-8:.5:8);
    R = sqrt(X.^2 + Y.^2) + eps;
    Z = sin(R)./R;
    figure;
    subplot(1,3,1);
    pcolor(X,Y,Z); 
    subplot(1,3,2);
    pcolor(X,Y,Z); shading flat;
    subplot(1,3,3);
    pcolor(X,Y,Z); shading interp;

    De salida:

    ¿Cómo puedo hacer un

    También, pcolor es demasiado plana, como se muestra aquí (pcolor es el 2d base; el 3d de la figura anterior se genera utilizando mesh):

    ¿Cómo puedo hacer un

  3. 5

    Nota que ambos pcolor y «surf + la vista(2)» no mostrar la última fila y la última columna de sus datos 2D.

    Por otro lado, el uso de imagesc, usted tiene que tener cuidado con los ejes. Las olas y el imagesc ejemplos en gevang la única respuesta que (casi, aparte de la última fila y columna) se corresponden el uno al otro porque el 2D sinc función es simétrica.

    Para ilustrar estos 2 puntos, me produce la figura a continuación con el siguiente código:

    [x, y] = meshgrid(1:10,1:5);
    z      = x.^3 + y.^3;
    
    subplot(3,1,1)
    imagesc(flipud(z)), axis equal tight, colorbar
    set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
    title('imagesc')
    
    subplot(3,1,2)
    surf(x,y,z,'EdgeColor','None'), view(2), axis equal tight, colorbar
    title('surf with view(2)')
    
    subplot(3,1,3)
    imagesc(flipud(z)), axis equal tight, colorbar
    axis([0.5 9.5 1.5 5.5])
    set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
    title('imagesc cropped')
    
    colormap jet

    ¿Cómo puedo hacer un

    Como puede ver, el 10 de fila y de la 5ª columna faltan en las olas de la parcela. (También se puede ver en las imágenes en las otras respuestas.)

    Nota de cómo se puede utilizar el «set(gca, ‘YTick’…» (y Xtick) comando conjunto de las x y de y rótulos de marcas de graduación correctamente si x y y no son 1:1:N.

    También tenga en cuenta que imagesc sólo tiene sentido si la z los datos corresponden a xs y ys son (cada uno) igualmente espaciados. Si no puede usar surf (y posiblemente duplicar la última columna y de fila y uno más «(final,final),» valor», a pesar de que un tipo de una sucia enfoque).

  4. 2

    Yo también sugieren el uso de contourf(Z). Para mi problema, yo quería visualizar un histograma 3D en 2D, pero los contornos eran demasiado suave para representar una vista superior de las barras de histograma.

    Así que en mi caso, yo prefiero usar jucestain la respuesta. El valor predeterminado shading faceted de pcolor() es más adecuado.
    Sin embargo, pcolor() no hace uso de la última fila y columna de la trazada de la matriz. Para ello, he utilizado el padarray() función:

    pcolor(padarray(Z,[1 1],0,'post'))

    Lo siento si es que en realidad no está relacionado con el post original

Dejar respuesta

Please enter your comment!
Please enter your name here