Matlab中控制圖像顯示邊界,subplot間距等

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_tightspaceplotssubplot1subplotplustight_subplot). Brett & Jiro在博客裏對這幾個函數進行了對比。其中tight_subplotsubplot_tight都可以更好的實現上面說的功能。
發佈了11 篇原創文章 · 獲贊 4 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章