2010-10-15 12 views

Respuesta

87

Puede crear este tipo de trazar por sí mismo utilizando con bastante facilidad el built-in funciones imagesc y text y ajustando una serie de parámetros para los objetos gráficos.He aquí un ejemplo:

mat = rand(5);   %# A 5-by-5 matrix of random values from 0 to 1 
imagesc(mat);   %# Create a colored plot of the matrix values 
colormap(flipud(gray)); %# Change the colormap to gray (so higher values are 
         %# black and lower values are white) 

textStrings = num2str(mat(:),'%0.2f'); %# Create strings from the matrix values 
textStrings = strtrim(cellstr(textStrings)); %# Remove any space padding 
[x,y] = meshgrid(1:5); %# Create x and y coordinates for the strings 
hStrings = text(x(:),y(:),textStrings(:),...  %# Plot the strings 
       'HorizontalAlignment','center'); 
midValue = mean(get(gca,'CLim')); %# Get the middle value of the color range 
textColors = repmat(mat(:) > midValue,1,3); %# Choose white or black for the 
              %# text color of the strings so 
              %# they can be easily seen over 
              %# the background color 
set(hStrings,{'Color'},num2cell(textColors,2)); %# Change the text colors 

set(gca,'XTick',1:5,...       %# Change the axes tick marks 
     'XTickLabel',{'A','B','C','D','E'},... %# and tick labels 
     'YTick',1:5,... 
     'YTickLabel',{'A','B','C','D','E'},... 
     'TickLength',[0 0]); 

y aquí está la figura esto genera:

alt text

Si se encuentra con problemas con las etiquetas señalizadoras del eje x que decide ser demasiado ancho y una superposición de otra, aquí está ¿Cómo se puede manejar:

  • las nuevas versiones de MATLAB: No está seguro de lo que VE Esto se agregó, pero en las versiones más nuevas los objetos de ejes ahora tienen el properties '{X | Y | Z} TickLabelRotation', que le permite rotar las etiquetas y ajustarlas mejor.

  • Las versiones anteriores de MATLAB: Para versiones anteriores se pueden encontrar algunas presentaciones en la MathWorks File Exchange que pueden girar el texto de la etiqueta de la señal, como XTICKLABEL_ROTATE de Brian Katz.

+1

+1: Mucho mejor exposición que la que proporcioné. –

+4

para una solución más general, debe comparar con 'mean (get (gca, 'CLim'))' en lugar de '0.5' para determinar el color del texto en un fondo de mapa de color en escala de grises. – Amro

+0

@Amro: ¡Buena sugerencia! Lo incorporé al código. – gnovice

1

espero que usted podría persuadir a Matlab para dibujar que, si nos fijamos en la Bolsa de archivos es posible que alguien ya ha escrito el código. Pero sería mucho más fácil, si no tiene el código, usar MS Excel.

EDIT: Así que pensé un poco más y esto es lo que se me ocurrió. No domino la publicación de gráficos en SO, confía en mí, esto te llevará a una solución. Pero honestamente sería más fácil con Excel.

Primero defina una matriz con sus valores de datos; Llamo a la matriz G en lo siguiente. A continuación, ejecutar los comandos:

image(G); 
colormap(gray) 

Ahora, he tenido que hacer un poco de tocar el violín alrededor, cambiar la escala de los datos, para obtener un buen gráfico, pero esto debe producir un diagrama de escala de grises con ejes numéricos. Ahora, vaya a la ventana de su figura y abra las herramientas de trazado.

Seleccione el eje X y presione el botón Ticks. Todo lo que tienes que hacer ahora es editar las etiquetas de los textos que quieras. Haz lo mismo para el eje Y. Escriba los números en los cuadrados de la trama: use el cuadro de texto del menú Anotaciones.

Después de mucho alboroto sobre usted tendrá el gráfico que desea. En este punto, le sugiero que elija el comando de menú Archivo | Genera M-File y haz justamente eso. Si desea crear dichos gráficos programáticamente en el futuro, simplemente convierta el archivo M generado en una función adecuada que haga lo que desee.

Pero todavía es mucho más fácil en Excel.

1

Si solo le interesa ver entradas nulas/distintas de cero en su matriz (por ejemplo, si es escasa), use spy.

De lo contrario, use imagesc.

PS: No puedo acceder a su imagen

Cuestiones relacionadas