## Plotting hitmap with different box size

### Mudasser Seraj (view profile)

on 27 Jul 2018
Latest activity Commented on by Mudasser Seraj

on 30 Jul 2018

### Kelly Kearney (view profile)

Hello,
I have a 64x9 matrix and I want to plot a heatmap with different box sizes. Figure as below.

Walter Roberson

### Walter Roberson (view profile)

on 27 Jul 2018
Neither heatmap() or HeatMap() (from Bioinformatics toolbox) can do this for you.
You might want to look in the File Exchange to see if you can find some code to adapt.
Mudasser Seraj

### Mudasser Seraj (view profile)

on 27 Jul 2018
Yeah. That's why I am asking help if someone can do this with codes. I couldn't find anything like this in File Exchange.
jonas

### jonas (view profile)

on 27 Jul 2018
You can do this quite easily with scatter3. I'll give it a try.

### Kelly Kearney (view profile)

on 27 Jul 2018

You can create this pretty easily using patches:
The test data:
c = rand(20,9)*2 - 1; % Color value
s = c; % Scale value
Plot
% Coordinates for a box
xbox = [-1 -1 1 1 -1]*0.5;
ybox = [-1 1 1 -1 -1]*0.5;
% Coordinates for the box centers
[yc,xc] = ndgrid(1:size(c,1), 1:size(c,2));
xc = xc + 0.5;
yc = yc + 0.5;
% Scale the box and add to center coordinates
x = xc(:) + xbox.*s(:);
y = yc(:) + ybox.*s(:);
% Plot
patch(x',y',c(:),'edgecolor', 'none');
axis tight equal;
set(gca, 'clim', [-1 1]);
colorbar;
Note that in this example I'm using the implicit expansion that was introduced recently (R2017 or so)... in older versions you'll have to use repmat, bsxfun, etc.

Mudasser Seraj

### Mudasser Seraj (view profile)

on 30 Jul 2018
Thank you so much.

on 27 Jul 2018
Edited by jonas

### jonas (view profile)

on 27 Jul 2018

Here's an alternative using scatter3.
%%Some data
[X,Y]=meshgrid(1:10,1:10);
Z=rand(10,10).*2-1;
figure;hold on
%%Scale for color
zc=(Z+1).*100;
cn = ceil(max(zc(:)));
cm = colormap(parula(cn));
%%Scale Z for box size
zb=abs(Z(:).*850);
%%plot and fix visuals
h=scatter3(X(:), Y(:), Z(:), zb,cm(ceil(zc),:),'s','filled')
colorbar
caxis([-1 1])
set(h,'markeredgecolor','k')
set(gca,'xtick',1:10,'ytick',1:10)
box on
axis([0,11,0,11])
view(2)
grid on
See attachment

Mudasser Seraj

on 30 Jul 2018
Thanks a lot.