http://www.bfcat.com/?p=2562
當我們進行可視化的時候,經常需要讓圖像或曲線顯示的美觀自然。但是matlab自己的subplot函數都默認留出了很大的邊界,這讓我們在有限的屏幕空間內不能展示更多的圖像。
這之前,我一直在使用一個自己寫的函數來修改subplot的間距。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function position = spp(row,col,axis)
%%%%%%%%%%%%% position = spp(row,col,axis) %%%%%%%%%%%%% if ~exist('axis','var') | isempty(axis) axis = [0,0,1,1]; end if(nargin==1) % case one , just number nplots = length(row); row = floor(sqrt(nplots)); col = ceil(nplots/row); end axis(3) = axis(1)+axis(3); axis(4) = axis(2)+axis(4); rowid = linspace(axis(4),axis(2),row+1); rowid = rowid(2:end); colid = linspace(axis(1),axis(3),col+1); colid = colid(1:end-1); [posy, posx] = meshgrid(rowid, colid); posx = posx(:); posy = posy(:); width = range(axis([1,3]))/col * 0.95; height = range(axis([2,4]))/row* 0.95; for i = 1: numel(posx) position(i,:) = [posx(i),posy(i),width,height]; end end |
這個函數可以生成subplot需要的座標位置。例如我們需要顯示N張圖,我一般會這樣寫
1
2 3 4 5 6 7 |
N=10;
ppos = spp(ceil(sqrt(N)), ceil(sqrt(N))) for i = 1:N subplot('position', ppos(i,:)) imagesc(rand(10,10)); axis off end |
這個函數可以生成subplot需要的座標位置。例如我們需要顯示N張圖,我一般會這樣寫
1
2 3 4 5 6 7 |
N=10;
ppos = spp(ceil(sqrt(N)), ceil(sqrt(N))) for i = 1:N subplot('position', ppos(i,:)) imagesc(rand(10,10)); axis off end |
這樣生成的圖如下所示,間距很小,但是生成方式比較死板,而且如果想給subplot加標題也沒地方了。一直想着自己改進,不過今天看到Matlab網站上介紹了一個函數,看起來不錯.
有一個函數叫做tightfig. 在這個函數的評論裏面,有人也提到了幾個相近的函數(subplot_tight, spaceplots, subplot1, subplotplus, tight_subplot). Brett & Jiro在博客裏對這幾個函數進行了對比。其中tight_subplot和subplot_tight都可以更好的實現上面說的功能。