Plotting hitmap with different box size
    9 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Mudasser Seraj
 il 27 Lug 2018
  
    
    
    
    
    Commentato: Mudasser Seraj
 il 30 Lug 2018
            Hello,
I have a 64x9 matrix and I want to plot a heatmap with different box sizes. Figure as below.

Can someone please help me with this? Added sample data file
5 Commenti
Risposta accettata
  Kelly Kearney
      
 il 27 Lug 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.
Più risposte (1)
  jonas
      
 il 27 Lug 2018
        
      Modificato: jonas
      
 il 27 Lug 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
Vedere anche
Categorie
				Scopri di più su Data Distribution Plots in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


