使用Matlab subplot()繪製子圖
6 人贊了文章
當我們需要在同個圖片繪製多個子圖時,就會用到subplot()函數,雖然Matlab可以自動的儘可能的讓圖像好看,但是如果子圖有很多就會出現各種各樣的問題,例如,同時顯示100張圖片時,可以使用:
% 一般的subplot圖像figurefor ii = 1:100 im = reshape(data(:,ii),32,32,3); subplot(10,10,ii) imshow(im)end
得到的圖像如下:
可以發現圖像之間的空白非常的大,無法清除的查看圖像,接下來我們調整圖像,消除圖像之間的空白,是圖像儘可能的清晰,可以使用下面的方式:
% 調整後的圖像row = 10; %子圖行數col = 10; %子圖列數figure()for ii = 1:100 im = reshape(data(:,ii),32,32,3); % 指定繪圖位置 [left bottom width height] subplot(row,col,ii) imshow(im) set(gca, XTickLabel, [],XTick,[],YTickLabel, [],YTick,[]) end
上面的程序將每個子圖的坐標軸都設置為空白,得到的圖像效果得到了明顯的改善:
可以發現圖像可以清晰的查看了,但是空白還是很大,繼續調整:
% 調整後的圖像row = 10; %子圖行數col = 10; %子圖列數figurefor ii = 1:100 im = reshape(data(:,ii),32,32,3); % 指定繪圖位置 [left bottom width height] subplot(Position,[(mod(ii-1,col))/col,1-(ceil(ii/col))/row,1/col,1/row]) imshow(im)end% 再次調整圖像的位置x,y,坐標p = get(gcf,Position);k = [size(im,2) size(im,1)]/(size(im,2)+size(im,1));set(gcf,Position,[p(1) p(2) (p(3)+p(4)).*k])
這次完全消除了子圖之間的空白,圖像如下:
這次圖像的空間得到了充分的利用。繪製子圖時制定了圖像的位置。並且將圖的寬和高設置為相等了。
下面調整每行的圖像的個數:
% 調整後的圖像row = 5; %子圖行數col = 20; %子圖列數figurefor ii = 1:100 im = reshape(data(:,ii),32,32,3); % 指定繪圖位置 [left bottom width height] subplot(Position,[(mod(ii-1,col))/col,1-(ceil(ii/col))/row,1/col,1/row]) imshow(im)end% 再次調整圖像的位置x,y,坐標p = get(gcf,Position);set(gcf,Position,[p(1) p(2) p(3) p(3)/(col/row)]) %高 = 寬/4
根據子圖的行數和列數相應的調整圖像的高寬比例。
還有一種方式是將所有的圖像重新組成新的矩陣,然後顯示圖像,這時不必使用subplot()函數。
% 將圖像組成全新的矩陣space = 2;%間距的大小imhigh = 32; %圖像高度imwidth = 32;%圖像寬度imchans = 3; % 圖像通道row = 10; %多少行子圖col = 10;%子圖列數immat = zeros(space*(row+1)+imhigh*row,space*(col+1)+imwidth*col,imchans);immat = uint8(immat);for ii = 1:row for kk = 1:col im = reshape(data(:,(ii-1)*row+kk),32,32,3); immat((ii-1)*imhigh+1+ii*space:ii*(imhigh+space),(kk-1)*imwidth+kk*space+1:kk*(imwidth+space),:) = im; endendfigureimshow(immat)
這樣繪製圖像的好處是可以人為控制子圖之間的間距。
推薦閱讀:
※Turtle(海龜)作圖
※#繪圖教程專欄#一步一步教您繪製酷炫的納米微觀球型材料
※《戰國》人物手繪圖曝光 孫紅雷與韓星rain「撞臉」
※Origin(Pro):3D圖--虛擬矩陣(Virtual Matrix)
※Origin(Pro):3D圖--矢量圖