Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding space between cells in Matlab imagesc output

I am creating a 2D plot in Matlab by calling this command: imagesc(vector1, vector2, mat_weights). Then, I run the colorbar command.

I now have a smooth 2D plot, but I want to add space between the cells. Here's how I want it to look:

Here's how the spacing should look

How do I add such spacing between the cells/boxes?

like image 906
Maxim Zaslavsky Avatar asked Jul 24 '13 05:07

Maxim Zaslavsky


1 Answers

You can add spaces between patches of color using another function than imagesc. Here, scatter provides a straightforward solution when used with option 'filled' and marker 'square'.

Note that you need to transform your 2-D matrix into a vector, but you don't have to scale your data: scatter takes the min and max values from your data and assign them to the min and max colors of the colormap.

The code

% 2-D in 1-D:
Z = diag(1:10); %example of 2-D matrix to be plotted
C = reshape(Z,1,[]); %1-D transform for vector color

% input definition
sz_matrix = 10;
X = repmat( (1:sz_matrix), 1, sz_matrix);
Y = kron(1:sz_matrix,ones(1,sz_matrix));
S = 1000;                  % size of marker (handle spaces between patches)
%C = (X.^2 + Y.^2);        % second color scheme

%plot      
figure('Color', 'w', 'position', [10 10 600 400]);  
scatter(X, Y, S, C, 'fill', 's');  
set(gca, 'XLim', [0 11], 'YLim', [0 11]);  
axis square;  
colormap summer  
colorbar

will give

enter image description here

EDIT

Here is a piece of code for a rectangular matrix. Please note the inversion of the Y axis direction so that the graphical representation matches disp(Z). To have similar (x,y) proportion in the white area separating color patches, one may try to resize manually the figure.

Z = diag(1:10); %example of 2-D matrix to be plotted
Z = Z(1:end-2,:); %trim for rectangular

% input definition
X = repmat(1:size(Z,2), 1, size(Z,1));
Y = kron(1:size(Z,1),ones(1,size(Z,2)));
C = reshape(Z',1,[]); %1-D transform for vector color
S = 1000;                  % size of marker (handle spaces between patches)

%plot      
figure('Color', 'w');  
scatter(X, Y, S, C, 'fill', 's'); 

set(gca, 'XLim', [0 size(Z,2)+1], 'YLim', [0 size(Z,1)+1]);  
colormap jet  
colorbar
set(gca, 'YDir','reverse'); 

The ouput:

enter image description here

like image 58
marsei Avatar answered Sep 25 '22 16:09

marsei