很是討厭MATLAB輸出圖像時自帶的白邊,尤其是當導出.eps
格式時,很難通過編輯圖片來去掉白邊。網上有很多代碼但是沒有注釋,有很多坑要填。這里提供一個去除白邊的代碼,自己在別人的基礎上修改了而且加了注釋。
MATLAB 坐標圖
XLabel -- 標簽
Title -- 標題
XTick -- 刻度線
XTickLable -- 刻度標簽
下圖顯示了一個二維視圖,其中 OuterPosition 值定義紅色區域、Position 值定義藍色區域,TightInset 值定義的品紅色區域到藍色之間的陰影區域。
OuterPosition和Position是一個四元素的向量:[left bottom width height]
,均為0-1的小數,且均相對於整個繪圖區域來說的,即figure的大小。
這四個值的作用:left和bottom確定左下角的坐標,即[0.25 0.25]
表示左下角在1/4處,width和height確定區域所占的高度和寬度,[0.5 0.5]
表示區域的高度和寬度為整個繪圖區域的一半。[0.25 0.25 0.5 0.5]
表示將區域的長和寬設為整個繪圖區域的一半並放在正中間(自己計算一下位置就知道)。
TightInset是也是一個四元素的向量,但是有些區別:[left bottom right top]
,其代表的是左下右上四個方向上的Position的margin,也就是Lable和Title所在區域(即陰影區域),其值也是0-1的小數,且均相對於整個繪圖區域來說的。TightInest是只讀屬性,故只能通過設置Position來改變圖像區域大小。
去白邊代碼
%%%%%%%%%%%%%%%%%%%%%%
% fn -- 圖像,可通過“f=figure;”獲得
% fan -- 圖像坐標,可通過“fa=gca”獲得
%%%%%%%%%%%%%%%%%%%%%%
f=[f1 f2 f3 f4]; % 四個不同圖像
axs = [fa1,fa2,fa3,fa4]; % 四個不同圖像的坐標對象
for i=1:4
% 圖像保存去掉白邊代碼
ax = axs(i); % 獲取一個坐標對象
set(ax,'LineWidth',1.5); % 設置坐標線寬
% set(ax, 'FontWeight','bold');
figure_FontSize=12; % 設置一個字號變量,方便統一更改
set(get(ax,'XLabel'),'FontSize',figure_FontSize); % 設置標簽字號
set(get(ax,'YLabel'),'FontSize',figure_FontSize);
% 通過findobj更改對象的屬性
set(findobj(get(ax,'Children'),'LineWidth',0.5),'LineWidth',1.5);
set(findobj('FontSize',10),'FontSize',figure_FontSize);
grid(ax,'on'); % 網格開
set(ax,'GridLineStyle',':','GridColor','k','GridAlpha',0.3); % 網格樣式
% 刪除白邊的主體代碼
% 注意在刪除白邊之后不可以再調整字號等屬性,否則會將圖像上的邊緣上的內容剪裁掉
outerpos = ax.OuterPosition; % 獲取外部框位置
ti = ax.TightInset; % 獲取內容框位置
left = outerpos(1) + ti(1); % 把Position的left值設為左邊margin的值
bottom = outerpos(2) + ti(2); % 把Position的bottom值設為右邊margin的值
ax_width = outerpos(3) - ti(1) - ti(3); % 設置對應的寬度
ax_height = outerpos(4) - ti(2) - ti(4); % 設置對應的高度
ax.Position = [left bottom ax_width-0.01 ax_height-0.01]; % 可以微調一下,以保證邊緣沒有被剪裁掉。
fig = f(i);
fig.PaperPositionMode = 'auto';
fig_pos = fig.PaperPosition;
fig.PaperSize = [fig_pos(3)+1 fig_pos(4)+1];
end
% 保存圖像為eps格式,psc2表示支持彩色
saveas(f1,'plot_img/example1.eps','psc2');
saveas(f2,'plot_img/example2.eps','psc2');
saveas(f3,'plot_img/example3.eps','psc2');
saveas(f4,'plot_img/example4.eps','psc2');
另外,如果保存的eps文件出現放大后模糊的問題,原因可能有兩個:
- 圖像中存在透明性質的點:取消透明即可
- 渲染方式為opengl:
set(gcf, 'Renderer', 'Painters');
更改渲染方式。